草庐IT

TEMPLATE

全部标签

c++ - 递归显式模板实例化是否可能?

给定一个模板templateclassPoint{...};这个模板可以显式实例化templateclassPoint;templateclassPoint;templateclassPoint;templateclassPoint;我不想像上面那样单独实例化每个模板,我想通过一次调用递归地实例化它们templateclassRecursiveInstantiate;哪里RecursiveInstantiate将实例化T,T,...,T.是否有可能创建这样一个类RecursiveInstantiate?如果不可能,您是否知道使用预处理器执行此操作的方法?事实上,我有兴趣将其推广到具有多

c++ - 仅用于基本 POD 的模板特化

模板特化是否有一个微妙的技巧,以便我可以将一种特化应用于basicPOD(当我说basicPOD时,我并不是特别想要structPOD(但我会接受)).templatestructDoStuff{voidoperator()(){std::coutstructDoStuff{voidoperator()(){std::cout或者我是否必须为每个内置类型编写特化?templatestructDoStuff{voidoperator()(){std::coutstructDoStuff{voidoperator()(){std::cout单元测试。intmain(){DoStuffint

c++ - 为什么我不能使用作为模板类的父类的变量?

啊啊templateclassA{public:inta;}b.htemplateclassB:publicA{public:intf();}templateintB::f(){intt;t=this->a;//Okayt=a//Errorreturn0;}为什么不使用this->会出错?我可以使用某种方法省略this->吗?(我修正了一些错误) 最佳答案 模板实例化有两个阶段(“两阶段名称查找”)。在第一阶段,解析(查找)所有非依赖名称。在第二阶段,解析依赖名称。依赖名称是依赖于模板参数的名称,例如:templatevoidfoo

c++ - 如何测试类 B 是否派生自类的模板族

如何在编译时测试B类是否派生自std::vector?templatestructis_derived_from_vector{staticconstboolvalue=????;};如何在编译时测试类B是否派生自模板族?templateclassFamily>structis_derived_from_template{staticconstboolvalue=????;};使用:templatestructX{};structA:X{}structB:std::vector{}structD:X{}intmain(){std::cout::value::value::value::

c++ - 使用 Lambda/Template/SFINAE 自动化 try/catch-safeguarding trampoline 函数

我有100个左右的蹦床功能。我想知道是否可以自动将每个包装在try/catchblock中。请提前警告,这不是一个简单的问题。我将首先用(简化的)代码描述问题,然后在下面尝试尽可能地回答它,以便读者可以看到我的位置。Foo有一个函数指针表:编辑:这是一个C函数指针表。所以它可以接受staticW::w。签名在这里:http://svn.python.org/projects/python/trunk/Include/object.h编辑:我尝试了一个测试用例here:classFoo{Tabletable;Foo(){//Eachslothasadefaultlambda.:table

c++ - 使用带有匿名类型参数的 std::enable_if

我尝试将std::enable_if与未使用和未命名的类型参数一起使用,以免扭曲return类型。但是,以下代码无法编译。#includetemplate::value>>Tfoo(){std::cout::value>>Tfoo(){std::cout();foo();}编译器说:7:3:error:redefinitionof'templateTfoo()'4:3:note:'templateTfoo()'previouslydeclaredhereInfunction'intmain()':11:12:error:nomatchingfunctionforcallto'foo()

c++ - 使用折叠表达式将参数包扩展到 lambda - gcc vs clang

考虑以下代码片段:templatevoidpost(TF){}templatestructfuncs:TFs...{funcs(TFs...fs):TFs{fs}...{}voidcall(){(post([&]{static_cast(*this)();}),...);}};clang++3.8+successfullycompilesthecode.g++7.0failstocompile出现以下错误:prog.cc:Inlambdafunction:prog.cc:10:43:error:parameterpacksnotexpandedwith'...':(post([&]{s

c++ - 根据派生类型选择类的显式特化

您好,我在选择具有显式特化的模板类的正确版本时遇到了问题。我想使用用于特化的类的派生类来选择特化。场景是:#includeclassA{};classB:publicA{};templateclassFoo{public:intFooBar(void){return10;}};//ExplicitspecializationforAtemplateintFoo::FooBar(void){return20;}voidmain(void){FoofooB;//Thisprintsout10insteadofwanted20iecompilerselectsthegeneralversio

c++ - 在 C++ 中声明具有相同名称的类型和模板

这是一个学术问题。在GCCbug38764的报告中,有如下例子:templatestructA{};typedefAA;//AcceptedbyComeau,butnotGCCtypedef::AA;//AcceptedbyGCCbutnotComeau我知道为什么代码可能无效,但我对其中一条评论有疑问:Thiscodeisinvalidbutthestandardsaysforthiscasenodiagnosticisrequiredsobothcompilersarecorrectaccordingtothestandard.为什么“无效”的代码被标准接受为有效的?对于这种情况(

c++ - 如何获取指针类型的指向类型?

我有一个指针类型Ptr。它可能是T*、unique_ptr、shared_ptr或其他。如何在编译时得到它的指向类型?我尝试了以下但失败了templatevoidf(){typedefdecltype(*Ptr())T;//giveunexpectedresults}以下已删除的答案效果很好。typedeftypenamestd::remove_reference())>::typeT; 最佳答案 这是一种方法。创建一个辅助类,使用适当的特化来推断指针类型。templatePointer;templatePointer{typede