草庐IT

variadic-templates

全部标签

c++ - 通过转换它们来组成可变参数模板参数

我有一个简单的情况,可能需要一种复杂的方法来解决,但我不确定。基本上我有一个封装了成员函数的对象:templateclassMemberFunction{private:usingfunction_type=R(T::*)(ARGS...);function_typefunction;public:MemberFunction(function_typefunction):function(function){}voidcall(T*object,ARGS&&...args){(object->*function)(args...);}};这很容易使用MemberFunctionfun

c++ - 可变参数模板参数大小(不计算)

在C++11中,我可以通过这种方式获得参数的总大小:templatesize_tgetSize(constFirst&first,constRest&...rest){returngetSize(first)+getSize(rest...);}templatesize_tgetSize(constT&){returnsizeof(T);}std::cout输出将是:“参数的大小是:10”。旧的C++有什么类比吗?附言也欢迎更好的C++11解决方案 最佳答案 对于C++11,我会使用它,它由编译时求值。#includetemplat

c++ - 具有递归模板参数包函数是否为每次迭代创建特定函数?

假设我使用参数包重新创建printf:voidprintf(constchar*string){std::coutvoidprintf(constchar*string,Tfirst,Params...p){while(*string!='\0'){if(*string=='%'&&*(string+1)!='%'){std::cout我使用以下参数调用该函数:printf("%distheanswertolife,theuniverse,andeverything.Pi=%f",42,3.14);编译器会创建2个具有不同签名的不同函数吗?printf(constchar*,int,P

C++ 可变参数模板方法特化

我有一些可变模板方法,看起来像这样:templatevoidInvoke(constchar*funcName,Args...args)const;templatevoidInvoke(constchar*funcName,Args...args)const{SPrimitiveparams[]={args...};SomeOtherInvoke(funcName,params,sizeof...(Args));}这里是SPrimitive-只是一个简单的结构,带有用于任何原始类型的构造函数。我想为某个复杂类型再做一个Invoke定义。这是我的问题:是否可以在C++11/14中进行可变

c++ - 使用可变参数模板的特化作为模板参数

考虑以下几点:templatestructMyT;templatestructMyT{};templateclassTT=MyT>structA{};//fineusingB=A;//doesnotcompileintmain(){return0;}当MyT用作A的默认参数时,编译器(g++5.4.0)很满意。但是,当它用于实例化A时,情况就不同了:temp.cpp:19:16:error:type/valuemismatchatargument1intemplateparameterlistfor‘templateclassTT>structA’usingB=A;^temp.cpp:

c++ - 获取类型列表中类型的索引

我有一个简单的TypeList实现,像这样:templatestructTypeList{staticconstexprstd::size_tsize{sizeof...(Ts)};};structT1{};structT2{};structT3{};usingTypes=mpl::TypeList;我想找出类型列表Types中类型T2的索引。这是我目前正在使用的,但是只有当我正在搜索的类型位于类型列表的开头时它才有效。否则,它会编译并出现错误“value:未声明的标识符”。templatestructIndexOf{};//IndexOfbasecase:foundthetypewe

c++ - 可变参数模板 initilizer_list 技巧

我在visualstudio2017RC上使用C++17编写了for_each_tuple,我对这种实现感到震惊。查看:templateconstexprautofor_each_tuple(fun_t&fun,tuple_t&&tuple){std::apply([&](auto&&...args){autol={(fun(std::forward(args)),0)...};},std::forward(tuple));}intmain(){autotup=std::make_tuple(1,2,3,4);for_each_tuple([](auto&arg){++arg;},tu

c++ - 如何与 "template using"定义的模板(别名)类成为 friend ?

类B想和每个人成为friendC.我正在努力寻找解决方法。只要我不添加有问题的行,下面是成功编译的完整代码。#includeusingnamespacestd;enumEN{EN1,EN2};templateclassC{public:C(){std::coutclassB{templateusingCT=C;//templatefriendclassCT;//ct;}};intmain(){B::test();return0;}这是我尝试过的(全部失败):-templatefriendclassC;templatefriendclassCT;templatefriendclassCT

c++ - 如何从通用模板 <typename T> 中提取 lambda 的返回类型和可变参数包

我想创建一个模板化类或函数,它接收一个lambda,并将它放在std::function内部Lambda可以有任意数量的输入参数[](inta,floatb,...)std::function应该对应于lambda的operator()的类型templatevoidgetLambda(Tt){//typedeflambda_traits::ret_typeRetType;??//typedeflambda_traits::param_tuple-->somehowbacktoparameterpackArgs...std::functionfun(t);}intmain(){intx=

c++ - C++ 模板的部分特化 : template parameter not deducible

下面的代码工作正常:templateclassFib{};templateclassFib{};但是下面的代码显示错误为:Error:templateparametersnotdeducibleinpartialspecialization:templateclassFib{};templateclassFib{};你能解释一下这种行为的原因吗? 最佳答案 我相信您只是缺少部分特化的正确语法:templateclassFib{};templateclassFib{};模板上的第一个参数是类型,而第二个只是一个常量值。