草庐IT

PARAMETER

全部标签

c++ - 当省略号位于模式的最内层元素时,在可变参数模板中打包扩展

我在cppreference.com上看到了这个例子.我不清楚函数参数的包扩展。FunctionparameterlistInafunctionparameterlist,ifanellipsisappearsinaparameterdeclaration(whetheritnamesafunctionparameterpack(asin,Args...args)ornot)theparameterdeclarationisthepattern:templatevoidf(Ts...){}f('a',1);//Ts...expandstovoidf(char,int)f(0.1);//

C++1y/C++14 : Converting static constexpr array to non-type template parameter pack?

假设我有一个静态存储持续时间的constexpr数组(已知范围):constexprTinput[]=/*...*/;我有一个需要打包的输出类模板:templatestructoutput_template;我想像这样实例化output_template:usingoutput=output_template;一种方法是:templatestructmake_output_template{templatestaticconstexproutput_templatef(std::index_sequence){return{};};usingtype=decltype(f(std::m

c++ - 可变模板构造函数优先级

给定以下简单的structtemplatestructA{A(Ta){}templateA(Ta,Ts...more){}};intmain(){Aa(1);}A(Ta)将被调用而不是可变模板构造函数的保证是什么,为什么? 最佳答案 您要查找的标准部分是§14.8.2.4IfAwastransformedfromafunctionparameterpackandPisnotaparameterpack,typedeductionfails.Otherwise,usingtheresultingtypesPandA,thededuct

c++ - 函数中推导参数之前的默认模板参数?

以下在g++中编译没有问题:templateReturnTypefunc(constOtherType&var){ReturnTyperesult=0;/*SOMETHING*/returnresult;}所有符合标准的编译器是否可以在默认模板参数(此处为ReturnType)之后有一个非默认模板参数(此处为OtherType)? 最佳答案 这很复杂。来自C++11规范:Ifatemplate-parameterofaclasstemplatehasadefaulttemplate-argument,eachsubsequentte

c++ - 避免循环内的条件和函数调用

我有一个看起来像这样的代码:voidfunction(intparameter){for(...)//abigloop{doublea=...;for(...)//abigloop{doubleb=...;doublevalue;if(parameter==1)value=some_math_expression_1(a,b);elseif(parameter==2)value=some_math_expression_2(a,b);...}}}我的想法是,根据参数,我想将一些数学表达式应用于a和b。这个函数执行了很多次并且必须很快,我想知道每次迭代时的那些条件分支是否会引入我可以节省

c++ - 将构造函数传递给函数

我使用的是一个STLvector,它是一个参数vector。std::vectorfoo;我试图找到一种无需执行此操作即可将参数对象添加到vector的方法:Parametera;foo.push_back(a);我遇到了一个执行此操作的实现:foo.push_back(Parameter());//UsingtheParameterconstructor我认为当我创建一个对象时,构造函数被调用,反之亦然。为什么我可以将构造函数传递给函数? 最佳答案 foo.push_back(Parameter());将临时构造的参数对象传递给p

C++ 风格约定 : Parameter Names within Class Declaration

我是一个相当新的C++程序员,我想听听支持和反对在类声明中命名参数的争论。这是一个例子:Student.h#ifndefSTUDENT_H_#defineSTUDENT_H_#includeusingnamespacestd;classStudent{private:stringname;unsignedintage;floatheight,GPA;public:Student(string,unsignedint,float,float);voidsetAge(unsignedint);};#endif/*STUDENT_H_*/对比#ifndefSTUDENT_H_#defineS

C++ 宏 : manipulating a parameter (specific example)

我需要更换GET("any_name")与Stringstr_any_name=getFunction("any_name");困难的部分是如何去掉引号。可能的?有什么想法吗? 最佳答案 怎么样:#defineUNSAFE_GET(X)Stringstr_##X=getFunction(#X);或者,为了防止嵌套宏问题:#defineSTRINGIFY2(x)#x#defineSTRINGIFY(x)STRINGIFY2(x)#definePASTE2(a,b)a##b#definePASTE(a,b)PASTE2(a,b)#def

C++11 operator""with double parameter

考虑:structstr{};stroperator""_X(longdoubled){returnstr();}这在g++4.7.2Wallstd=c++11下编译得很好但现在如果我给双倍:stroperator""_X(doubled){returnstr();}我收到以下错误消息:main.cpp|3|错误:'stroperator""_X(double)'的参数列表无效问题是什么?这与“无法重新定义内置文字后缀的含义”(StroustrupFAQ)有关吗?您能想出解决方法吗? 最佳答案 Whatistheproblem?问题

c++ - 初始化列表中的 QString 导致访问冲突。这里出了什么问题?

在我不理解的初始化列表中使用QString时,我遇到了访问冲突。这是一个重现问题的最小示例。//fileClassA.h#pragmaonce#includestructParameter{QStringstringPar;};classClassA{QStringm_string1;public:voidfunction(Parameterpars);};A类的实现...//fileClassA.cpp#include"ClassA.h"voidClassA::function(Parameterpars){m_string1=pars.stringPar;//lastlinecal