草庐IT

c++ - 从可变模板构造类

我正在尝试创建一个名为Sink的类,它将创建一个指向您传入的类的指针,这是在RAII中包装一个api。完整版这段代码中,自定义类也是继承自另一个类,有静态资源可以检查这个。指针也被传递给api。但为了简单起见,我删除了它。这是我从cpp.sh得到的错误Infunction'intmain()':43:30:error:nomatchingfunctionforcallto'Sink::Sink(int)'43:30:note:candidateis:10:5:note:Sink::Sink(Args&&...)[withCustomSink=OneArg;Args={}]10:5:no

c++ - 编译嵌套参数包代码时出现 gcc 段错误

我试图编写一个代码(截至2014年1月使用mingw32gcc4.8.1)涉及两个参数包Args1...和Args2...。我在这里(http://en.cppreference.com/w/cpp/language/parameter_pack)了解到我需要一个嵌套类。Args1...和Args2...的长度相同(最终我希望从Args1推导出Args2......)。有时它们甚至可以是同一类型。所以我想为这个简单的案例编写一个速记using语句作为开始:templateusingzip_t=zip::with;但是,gcc在编译这条语句时会产生段错误。如果我做错了什么或者这是一个gc

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++ - std::bind 和完美转发

以下代码无法编译:#includetemplatevoidinvoke(Args&&...args){}templatevoidbind_and_forward(Args&&...args){autobinder=std::bind(&invoke,std::forward(args)...);binder();}intmain(){inta=1;bind_and_forward(a,2);}如果我没理解错的话,原因如下:std::bind复制它的参数,当binder的operator()被调用时,它将所有绑定(bind)参数作为lvalues传递-甚至那些输入bind的参数作为rva

c++ - 与可变参数模板相结合的成员指针数组的定义

在嵌入式应用程序中,我想创建一个辅助类,它包含一个指向某个类的成员函数的指针列表,其中辅助类连续调用成员函数。目前,我在处理保存指针的静态数组的定义语句时遇到了麻烦。这是代码:templatestructFunctionSequence;templatestructFunctionSequence{typedefR(C::*PointerToMember)(Args...);templatestructType{staticconstPointerToMemberf[sizeof...(F)];};};templatetemplate::PointerToMember...F>cons

c++ - 为什么这个可变参数模板参数的替换失败了? (在固定参数之前打包)

这是触发编译错误的最小示例:#includevoidfoo(int,double,int){}templatevoidpost_forwarder(void(*fun)(Args...,int),Args&&...aArgs){fun(std::forward(aArgs)...,5);}intmain(){post_forwarder(foo,6,6.1);//Compilationerroroninstantiationreturn0;}我怀疑问题与可变参数模板参数在固定int参数之前在函数类型中扩展的事实有关,但如果是这种情况,我找不到很好的理由。Clang3.6报错是:erro

c++ - 声明为 consts 的函数 args 随定义变为非常量

这个问题在这里已经有了答案:Whydoesafunctiondeclarationwithaconstargumentallowcallingofafunctionwithanon-constargument?(4个答案)关闭4年前。代码classA{public:voidf(constinti);};voidA::f(inti){std::cout为什么编译器在这种情况下不报错?为什么定义会覆盖常量参数?此外,当参数的类型为reference(&)时,编译器会抛出错误,但在这种情况下为什么不呢?是否有任何编译器标志可以对这些提到的情况发出警告?我对编译器错误POV更感兴趣。因为可以很

c++ - 当没有传递任何参数时,#__VA_ARGS__ 应该生成什么?

示例代码:#defineFOO(...)Youpassed:#__VA_ARGS__FOO(1,2,3)FOO()使用VisualC++(版本14CTP)进行预处理,得到:Youpassed:"1,2,3"Youpassed:在最后一行,#__VA_ARGS__变成了虚无。我希望它变成“”。对于应该发生的事情是否有明确的引用?我用Google搜索了很多,但没找到。任何建议的解决方法也会很有用。 最佳答案 根据6.10.3.2#运算符(C11):Semantics2-[...]Thecharacterstringliteralcorr

c++ - std::is_constructible<T, Args> 是如何实现的?

这个问题在这里已经有了答案:C++98/03std::is_constructibleimplementation(4个答案)关闭5年前。到目前为止,我在网上找不到任何ELI5。对于一个学习项目,我想实现我自己的is_constructible。有人可以解释一下它是如何工作的吗?

c++ - 了解可变参数模板函数中的点

假设我有以下代码。我在很大程度上理解这一点。template//--->StatementAvoidfoo_imp(constArgs&...args)//--->StatementB{std::vectorvec={args...};//--->StatementC}现在我对...应该出现在变量名称之前或之后的位置感到有点困惑。这就是我感到困惑的原因。下面给出的陈述Atemplate建议...是变量类型,Args是变量名(这很好)下面给出的陈述Bvoidfoo_imp(constArgs&...args)在我看来,类型是Args,它是模板类型,但是在Args之后添加...让我感到困惑