草庐IT

Templates

全部标签

c++ - 省略 C++ 模板参数列表时的区别

什么时候可以省略C++模板参数列表?例如,在VisualStudio2010中,这段代码编译得很好:templateVec2Vec2::operator+(constVec2&v)const{returnVec2(x+v.x,y+v.y);}如果你内联代码,它实际上编译时没有任何参数列表。但这真的和下面的版本一样吗?templateVec2Vec2::operator+(constVec2&v)const{returnVec2(x+v.x,y+v.y);} 最佳答案 在类中你可以省略类类型的参数:templatestructA{Af

c++ - 复杂的 C++ 模板语法

加入SO后,每当我打开讨论模板的主题时,我经常会看到这种语法。我试着在谷歌上搜索,但没有成功。templatechar(&f(T[1]))[1];//whatisit?whatistheuseof'[]'bracketsandtheintegerinit?templatechar(&f(...))[2];//notthiseitherintmain(){charc[sizeof(f(0))==2];}//andthis?从这里:SFINAEwithinvalidfunction-typeorarray-typeparameters?请解释我放置注释的3行。我特别想了解语法。我们可以只在

c++ - 显式成员特化

g++3.4.5接受此代码:templatestructA{staticconstchar*conststr;};structB{};typedefAC;templateconstchar*constC::str="B";//Equivalenttofollowing?//templateconstchar*constA::str="B";但我不确定它是否真的合法C++03。特别是,[14.7p3]Inanexplicitspecializationdeclarationforaclasstemplate,amemberofaclasstemplateoraclassmembertem

c++ - 从模板中绑定(bind)模板函数

接续thisquestion.我正在尝试绑定(bind)一个给定的函数,该函数返回除void之外的其他内容,以便稍后能够简单地调用f()。但是,以下代码无法在GCC4.4上编译。它在VS2010上编译,但生成的程序崩溃。templatevoid_hideRet(std::functionfunc,RetType*ret){*ret=func();}templatestd::functionregisterFunc(FuncTypefunc,RetType*ret,ParamTypeparam){autof=std::bind(func,std::forward(param));retu

C++模板函数问题

我正在尝试编写一个将值和一系列查找表作为参数的转换函数。查找表具有以下声明:templatestructDataTranslator;我可以让它与以下翻译模板函数声明一起工作:templateReturntranslate(ValTypeval,TransType&trans);templateReturntranslate(ValTypeval,TransType&trans,OtherTrans&...others);然后我可以做类似下面的事情:DataTranslator::typebaudTranslator;DataTranslator::typebaudCmdTransla

c++ - 函数参数中的 Typedef 等价

如果没有例子,这个问题很难问,所以这里是:#includestructO{};structC{templatevoidfunction1(void(C::*callback)(constO*));templatevoidfunction2(void(C::*callback)(consttypenameT::value_type));voidprint(constO*);};intmain(){Cc;c.function1>(&C::print);//Success.c.function2>(&C::print);//Fail.}我得到的错误是:error:nomatchingfunc

c++ - 比较模板类中的枚举 - 它安全吗?

所以,这是一个非常简单的问题,下面的例子说明了这一点。当你编译它时,编译器适本地(?)报告一个警告(我们正在比较barfoo::bar和barfoo::bar),现在给出bar是一个枚举-我可以放心地忽略这个警告吗?#includeusingnamespacestd;structfoo{};templatestructbarfoo{enumbar{ONE,TWO,THREE};baraction()const{returnTWO;}};template::bareAction=barfoo::ONE>structIsAction{templatestaticboolcheck(bfco

c++ - 如何使用 mpl 技术启用构造函数

我不太了解boost::enable_if以及如何使用它进行构造函数切换。代码是这样的:structNullType{};structTestType{};structNonNull{};templatestructTemplateStruct{TemplateStruct(inti,typenameboost::enable_if,void*>::typedummy=0){std::cout,void*>::typedummy=0){std::cout(1);TemplateStruct(1,2);return0;}我要归档的是以下内容。它希望第一个Ctor仅在给出NullType时

c++ - g++ 奇怪的警告

在我开始回答一个SO问题的玩具项目时,我被一个我不理解的g++警告淹没了。format.hpp:230:warning:dereferencingpointer‘’doesbreakstrict-aliasingrules在互联网上搜索我得到的印象是这可能是一个g++错误;它真的是一个错误吗?如果是,是否有任何解决方法?完整的源代码太大而无法包含,但是isavailablehere.这是触发警告的部分...templateclassValueWrapper:publicValueWrapperBase{public:Tx;ValueWrapper(constT&x):x(x){}vir

c++ - 编译器以获得更好的模板支持

以下哪个C++编译器更好地考虑C++模板(+发出的错误消息)?g++clang科莫cl.exe(MSVC++)icl.exe(英特尔C++) 最佳答案 我更喜欢Comeau,因为它符合标准。Clang发出的错误消息aremoreuseful比那些由g++发布的。MSVC++的编译器已损坏[没有两阶段名称查找]。 关于c++-编译器以获得更好的模板支持,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/q