草庐IT

VARIADIC

全部标签

c++ - 在位置 N 处检索 C++ 可变参数模板常量参数值的适当方法是什么?

我想知道在位置N(N在编译时已知)处检索可变参数模板常量参数值的正确方法是什么。例如,假设您有一个模板接收可变数量的函数指针作为参数,您需要检索第二个函数指针。现在,我能想到的只有这个……typedefint(*func)(int);templatestructtestme{inlineintgetme(intp)const{returnstd::array{F...}[1](p);}};...不用说,这是非常骇人听闻的。有一个更好的方法吗?谢谢。编辑:基于typedeftemplate的代码,我制作了一个可以接受任何类型作为可变模板参数的版本。它已经过测试,可以在GCC4.6的实验版

c++ - c++0x 元组是否使用新的可变参数模板或 Boost 的宏元组实现?

我读到它基于Boost的版本,但我不太确定具体到实现时这意味着什么。我知道Boost有自己的可变参数模板,但我认为c++0x会为新元组使用它自己的可变参数模板。 最佳答案 C++0x标准草案中的tuple使用C++0x可变参数模板。它被声明为(§20.4.1):templateclasstuple;但是请注意,TR1语言扩展还包括tuple,它不使用可变参数模板,因为在编写TR1时没有这样的东西。在TR1中,tuple声明为(§6.1):templateclasstuple;其中M是一些实现定义的值,应该至少为10。TR1并不是C+

c++ - Variadic 模板和 "expected a type"错误

我正在(主要是出于学习目的)自己实现tuple,我刚刚遇到了一个问题。我有以下代码:namespaceRose{templatestructRemoveReference{typedefTType;};templatestructRemoveReference{typedefTType;};templateclassTuple;templateclassTuple{public:Tuple(Firsta,Elems...more):More(more...),Element(a){}Tuple&operator=(constTuple::Type,RemoveReference::Ty

c++ - 使用可变参数模板作为类和方法的参数

我的问题是关于以下一段代码:templateclassA{public:templatestaticvoida(){}};templateclassB{public:templatevoidb(){A::a();}};intmain(intargc,char**argv){return0;}我有一个A类,它有一个可变参数模板并包含一个静态方法a,它有另一个可变参数模板。从其他地方(在本例中为B类)我有两组不同的可变参数模板,我想传递给A::a。编译器(GCC4.8.1)给出以下错误信息:main.cpp:Instaticmemberfunction‘staticvoidB::b()’:

c++ - Variadic 模板类,从其参数列表中获取特定类型的索引

是否可以实现一个可变参数模板类的函数成员,该函数成员返回可变参数列表中给定类型的索引。我看到的问题是创建某种伪造的可变参数列表,只是为了触发编译时模板评估。templateclassFoo{templateint_get_idx(inti,constTArg&curr,TArgs...args){if(std::is_same(T,TArg)){returni;}else{returnget_id(i+1,args...);}}用法类似于:Foofoo;inti=foo.get_idx();//i==1 最佳答案 你可以使用类似的东

c++ - C++中可变参数构造函数的用途是什么?

考虑以下程序:#includestructTest{Test(...){std::cout我认为它是可变构造函数。C++标准是否说构造函数可以是可变的?这样的构造函数有什么用?允许可变构造函数的理由是什么? 最佳答案 让我们试着一一回答您的问题:Ithinkitisvariadicconstructor.你是对的。DoestheC++standardsaysthatconstructorcanbevariadic?IANALL,但是,我认为是的。为什么不?构造函数只是一个(成员)函数。Whatistheuseofsuchconstr

c++ - 如何检查传递给可变参数函数的参数类型

我是可变参数模板的新手,为了学习考虑以下函数templateT*make_arr(args...arg){//CodetocheckifpassedargsareofthesametypeT*arr=newT[sizeof...(arg)]{arg...};returnarr;}我有两个问题:我希望函数是模板化的,我希望传递的参数是同一类型,所以问题是:是否可以检查传递的参数是否是同一类型?是否可以通过推断args...的类型来推断数组指针的类型?,我的意思是不使用?...我使用了decltype(arg)但它没有用...注意:如果不合适请编辑标题问题...谢谢

C++ 模板 : cannot match the last template in variadic class template

我正在学习C++11可变参数模板并创建了一个模板结构来计算给定列表的最大数量并尝试了:#include#includetemplatestructmax:std::integral_constantb?max::value:max::value)>{};templatestructmax:std::integral_constantb?max::value:max::value)>{};templatestructmax:std::integral_constant{};intmain(){std::cout::value但是g++提示:test.cc:7:58:error:wrong

c++ - Variadic constexpr 类型选择器

对不起,这个名字太浮夸了,我想创建一个constexpr函数,它接受可变数量的boolean模板参数,并返回“模板索引”第一个true值,在C++11中(仅欢迎C++14解决方案,但不会被接受为答案)。例如调用这个函数SelectorSelector()==0//noneofthetemplateargumentistrueSelector()==1//firsttruetemplateargumentisthefirstoneSelector()==3//..andhereit'sthethirdone这个的典型用法,以及我称之为“类型选择器”的原因,是Selector::value

c++ - 是否可以生成参数包?

考虑以下伪代码:templatestructworker:unique::type...{};structx{};structy{};structz{};能不能写个模板unique这样它会生成一个参数包,该参数包仅包含T中的唯一类型。s,所以worker将直接派生自x,y,z分别按顺序给定Ts是非期末类(class)吗? 最佳答案 据我所知:不。问题是type是typedef的结果指令,和typedef不能别名包。这实际上很麻烦,而且大多数情况下,对包的计算需要引入包装类型(例如templatestructpack{};)才能传递它