草庐IT

可变性

全部标签

c++ - 编译器错误或非标准代码? - lambda 中的可变参数模板捕获

我有以下C++11代码;templateintg(T...t){return0;}templatevoidf(Args...args){autolm=[&,args...]{returng(args...);};lm();}intmain(){f(2,5,7);}我确实相信它是有效的C++11,根据;标准第5.1.2.23节;Acapturefollowedbyanellipsisisapackexpansion(14.5.3).[Example:templatevoidf(Args...args){autolm=[&,args...]{returng(args...);};lm();

c++ - 是否可以对每个参数进行可变参数宏替换?

我现在在SO上阅读了很多关于可变参数宏的问题,但似乎没有人回答过最简单的问题:#defineIDENTITY(x)x#defineIDENTITY_FOR_ALL(...)???有没有办法让所有参数的IDENTITY_FOR_ALL扩展为IDENTITY(X)?是否也可以使用任意数量的参数? 最佳答案 可变参数宏没有像可变参数模板那样的包扩展。不过您可以使用Boost.Preprocessor(或其方法)。如果您不想在元素之间使用任何逗号,请使用#include#include#defineID_OP(_,func,elem)fun

c++ - 可变参数模板构造函数的推导指南失败

我正在尝试重现视频C++Weekly-Ep48-C++17'sVariadicusing的结果,但失败了。该问题可以简化为以下代码段。假设我有这样的通用结构:templatestructContainer{templateContainer(U...us){}};现在我可以初始化一个Container带有任何参数,例如autod=Container(1,2,3);但是,编译器永远不会知道d是什么类型是。为了解决这个问题,我们应该提供一个推导指南,例如templateContainer(U...)->Container根据视频,编译器现在应该知道d类型为Container.但是,代码没有

c++ - 将类型插入/删除可变参数模板列表(参数包)

在可变参数模板类型列表(参数包)中实现基于索引的类型插入和删除的最佳方法是什么?所需的代码/行为:templatestructList{/*...*/};static_assert(is_same::Insert,List>());static_assert(is_same::Insert,List>());static_assert(is_same::Remove,List>());static_assert(is_same::Remove,List>());我尝试了一种基于推回最初为空列表中的参数的实现,但它很难阅读/维护。参数类似于:templatestructInsertImp

c++ - 从模板化模板类和可变模板中声明 "container"对象

我需要声明一个可以存储不同类型容器的类。即,如果它可以处理std::bitset和std::array就好了。但是,这两个类需要不同的模板参数......是否可以(以及可能如何)使用模板化模板类和可变参数模板来声明此类类?示例(但错误):templateclassContainer,std::size_tN,typename...Args>classBase_Class{...Containercontainer;};编译器提示N/2不是类型。显然,对于std::array和std::bitset,我需要将大小作为最后一个模板参数……是否可以编写这种疯狂的代码?谢谢!编辑:就我而言,主

c++ - 如何为类似元组的可变参数类创建完美的转发构造函数

我正在尝试创建类似于元组的东西,但我在编写构造函数时遇到了问题。代码如下:#includetemplatestructB{templateexplicitB(ArgTypes&&...args){static_assert(sizeof...(Ts)==sizeof...(ArgTypes),"Numberofargumentsdoesnotmatch.");}};structMyType{MyType()=delete;MyType(intx,constchar*y){}};intmain(){Ba{2,'c'};//worksBb{2,false,{4,"blub"},'c'};/

c++ - 从模板类调用可变参数函数

我有一个带有可变模板成员函数的模板类,我无法从类外部调用它。这是我正在尝试做的一个简化示例:templatestructfoo{foo(){}templateintrun(){returnsizeof...(I);//orwhatever}};templateintrun_int(){returnfoo().run();//OK}templateintrun_T(){returnfoo().run();//error}当foo被专门化时,我可以毫无问题地调用它的模板成员函数run()。但是,如果我尝试从不特化foo的函数或结构中调用它,gcc(4.7)会发出错误消息“参数包未使用‘..

c++ - 使用可变参数模板的基于策略的设计

我有一组同类策略类,我想将它们作为策略传递给模板类PolicyDrivenClass,它采用一些未知数量的策略模板参数。每个策略都实现了一个“名称”函数,我希望能够在运行时通过PolicyDriveClass::getNames查询所有策略的名称。我有一个有效的实现,但感觉很笨拙,特别是考虑到在我的最终设计中,Policy类将实现几个类似于“name”的函数,尽管可能具有不同的返回类型,而且我的PolicyDrivenClass会想要为每个函数提供类似于“getNames”的访问器。我的问题是是否有人可以为此提出更好的实现方案。我使用clang++是为了它的值(value)。我的g++

c++ - 使用可变参数宏或模板来实现一组功能

我有一组用于实例化和初始化一组对象的方法。除了传递给Init函数的参数数量外,它们看起来几乎相同:ObjectType*CreateObjectType(Arg1a1,Arg2arg2,...ArgNaN){ObjectType*object=newObjectType();[...]object->Init(this,a1,a2,...,aN);[...]returnobject;}请注意,除了传递给Init函数外,不能在任何地方使用参数。我想找到一种方法来实现所有这些,而不必为每种对象类型重复代码。我尝试使用可变参数宏,结果如下(无效):#defineCREATE_OBJECT_I

C++ 可变数量的参数

我需要定义一个可以接受可变数量参数的虚函数,问题是C风格的省略号不适用于非pod类型,我的内存量有限(2KB),所以我试图避免只分配临时对象传递给函数,所有参数都将是同一类型(自定义共享指针),我也无权访问STL或boost。有没有C++技巧可以让我调用带有可变参数的函数? 最佳答案 假设你的参数类型属于Arg类,你可以试试这个:classArgUser{public://syntacticsugar:voidmethod(){//nullarydoMethod();}voidmethod(constArg&a1){//unaryd