草庐IT

可变性

全部标签

c++ - 使用可变参数模板进行统一初始化

我有一个PODChParam,它是可变参数模板函数set中的一个参数。我想在花括号p.set({Param::D,1000.f},{Param::p,2000.f})中传递给函数参数(构造函数参数)。并认为将隐式调用构造函数并创建ChParam对象。但这是不可能的,我应该明确地创建一个对象a.set(ChParam{Param::D,1000.f},ChParam{Param::p,2000.f});是否有可能以某种方式使用变体p.set({Param::D,1000.f},{Param::p,2000.f})?#includeusingnamespacestd;usingFloat=

c++ - 没有命名参数的可变参数函数

我注意到,GCC和MSVC都对以下代码感到满意:#includevoidfoo(...);intmain(){foo();}voidfoo(...){std::cout更具体地说,代码在GCC6.2.0和VisualStudio2015下运行。我知道C至少需要一个named参数在省略号之前,这允许使用专门的va_start处理任意数量的参数,va_args,和va_end来自的宏(此处为)标题。否则,它甚至无法编译。C++是否对“纯省略号”形式有一些特殊处理,或者它是否不适合获取参数,即它是允许的,但完全不切实际? 最佳答案 C++

c++ - 为什么 C++ 不允许在非模板函数中使用可变参数?

intfoo(inti){returni;}intfoo(inti,int...n){returni+foo(n...);}intmain(){returnfoo(1,2,3);//error}为什么C++不允许这种直观的语法? 最佳答案 您需要模板机制来实例化您的第二个foo函数,因为函数的签名仅在使用时确定。因此,您在这里可以要求的唯一功能是,您的语法暗示了一个函数模板,其中模板参数包被限制为类型int。不过,对于没有template关键字的模板,存在相当大的反对意见。然而,ConceptsTS在这方面会有所改变。

c++ - 可变参数模板不适用于初始值设定项列表

我创建了一个工厂函数模板:templatestd::shared_ptrcreate(Args...args){returnstd::make_shared(args...);}还有一个简单的容器:structGroup{std::vectorvec;Group(std::initializer_listil):vec(il){}};然后我尝试创建一个组intmain(){autogr=create({1,2,3});return0;}这不编译,error:nomatchingfunctionforcallto'create'autogr=create({1,2,3});candida

c++ - 创建一个包含可变类型的元组

今天我试图在编译时创建一个有点具体(至少对我而言)的元组。我有一些基本的结构,比方说:structFoo1{intdata;};structFoo2{intdata;};structFoo3{intdata;};还有另一个结构,但带有一些模板内容:templatestructMetadata{usingtype=T;std::bitsetbitset;};所以现在我想创建这种元组:constexprstd::tuple,Metadata,Metadata>test{{0},{0},{0}};但以一种自动的方式,更像是:templateconstexprautomake_metadata

c++ - 模板类中的模板可变参数函数无法编译

我正在尝试为模板类编写一个函数,该函数接受一个参数,该参数是大类私有(private)数据中成员类的函数指针。当您调用该成员时,它会在较小的类上调用该函数。(混淆吧?)为了演示,我在这里有一个不起作用的例子:#include#includeusingnamespacestd;templatestructMyClass{templateautocall_me(Ffunc,A...args){//passinthefunctionwewanttocallreturn(mContainer.*func)(args...);//callthefunctionsuppliedby//thepar

c++ - 使用可变参数模板构建函数参数

我有这个示例代码,它可以满足我对3参数函数的需求:templateTGETPARAM(void){returnT();}templateintGETPARAM(void){return123;}templatedoubleGETPARAM(void){return1.2345;}templateconstchar*GETPARAM(void){return"hello";}templateRESBuildArgs3(RES(*fn)(P1,P2,P3)){P1p1=GETPARAM();P2p2=GETPARAM();P3p3=GETPARAM();returnfn(p1,p2,p3)

c++ - 用于创建结构的可变参数宏

我怎样才能写一个像这样使用的宏(用于gcc):CREATE_STRUCT(my_struct1,foo);CREATE_STRUCT(my_struct2,foo,bar);并扩展为structmy_struct1{std::stringfoo;};structmy_struct2{std::stringfoo;std::stringbar;};?我当然需要不同数量的成员的灵active,但对我来说已经很少了(大约4或5)。我发现了几个相关的问题,例如this和this,但是当我试图对这个问题应用这种神秘的宏魔法时,我完全迷失了。PS:我知道如何编写5个宏(每个参数一个)来完成这项工作

c++ - 使用存储在可变数据结构中的字段作为方法参数

我有一个可变数据结构,每个“层”包含一个字段。如何使用存储在结构中的所有字段作为函数或构造函数的参数?templateclassBuilder{};templateclassBuilder:publicBuilder{public:Builder(Tt,Ts...ts):Builder(ts...),tail(t){}Resultbuild(){//wanttousetail,Builder::tail,etc.//asctororfunctionargumentswithoutmultiplespecializations}private:constTtail;};一般来说,我希望能

没有参数的 C++ 可变参数函数

我有多个类(这里为简单起见Foo和Bar)structBar{};structFoo{};和一个接受单个模板参数并根据该类型执行某些操作的函数:templateconstexprvoiddoSomething(){cout::value在我的代码中,我得到了Foo的模板参数包s和Bars,我应该调用doSomething()每个函数都有函数(我不关心函数执行的顺序)。doStuff();//-->True/False/False到目前为止,我能想到的唯一解决方案是:templateclassDoer;templatestructDoer{staticconstexprvoiddoStu