草庐IT

TEMPLATE

全部标签

c++ - 在没有括号的宏中使用逗号 : How can I mix and match with a template?

考虑一个简单的宏:#defineECHO(x)xECHO(foo(1,2))这会产生我们期望的准确输出:foo(1,2)上面的例子之所以有效,是因为预处理器识别了与函数调用相邻的括号。现在考虑如果我使用模板而不是函数调用会发生什么:ECHO(template)这会导致错误,因为预处理器会解释template和bool>作为宏的两个单独参数。预处理器无法识别范围!有没有办法在宏中使用这样的模板? 最佳答案 #defineCOMMA,ECHO(template)有点痛,但有效。FWIW,如果参数的语法允许(),则不需要替换,例如,ECH

c++ - 数组的 constexpr 初始化以对内容进行排序

这有点像一个谜而不是一个现实世界的问题,但我已经遇到了这样一种情况,我希望能够编写一些行为完全相同的东西templatestructSortMyElements{intdata[N];templateSortMyElements(TT...tt):data{tt...}{std::sort(data,data+N);}};intmain(){SortMyElementsse(1,4,2,5,3);intse_reference[5]={1,2,3,4,5};assert(memcmp(se.data,se_reference,sizeofse.data)==0);}除了我想要SortM

c++ - 我如何 curry 可变参数模板模板参数?

Variadictemplate模板参数接受任何模板:templatestructTest1{usingtype=int;};templatestructTest2{usingtype=char*;};templateclassBeCurry>structCurrying{};usingcurry=Currying;usingcurry2=Currying;我想要Curryingtemplate模板类。这意味着:如果参数接受一个模板参数作为Test1,curry::apply::typegetTest1::type.如果参数接受两个模板参数为Test2,curry2::apply是一个

c++ - 无参数可变参数模板的模糊重载

相关:Ambiguousoverloadaccessingargument-lesstemplatefunctionswithvariadicparametersSimplevariadictemplatefunctioncan'tinstantinateWhyisthisvariadicfunctionambiguous?考虑这对可变参数模板:templateboolAll(Param&c){returntrue;}templateboolAll(Param&c){returnf(c)&&All(c);}这有效并编译。但是,没有第一个模板参数怎么写呢?听起来微不足道?嗯,这就是我的想

c++ - 模板模板参数默认可以引用其他模板类型参数吗?

我正在尝试执行以下操作:templatestructA{templatestructAA{};};templateclassW=A::AA>//CausesC3202structB{};但是VisualStudio2010编译器吐出:错误C3202:“AA”:模板参数“”的默认参数无效,需要一个类模板如果我将B替换为以下模板://Replace"T"with"int"templateclassW=A::AA>structB{};代码编译正常,但不是我想要的。如果原始版本不是合法的C++,是否有替代方案可以为“B”模板的用户提供类似的界面? 最佳答案

c++ - SFINAE enable_if 显式构造函数

我正在尝试通过enable_if在显式和隐式转换构造函数之间切换。我的代码目前看起来像#include#includeenumclassenabled{};templateusingenable_if_t=typenamestd::enable_if::type;templateusingdisable_if_t=typenamestd::enable_if::type;templatestructSStruct{staticconstexprstd::intmax_ta=A;};templatestructSCheckEnable:std::integral_constant{};t

c++ - 是否可以使用 `constexpr` 模板变量作为正式模板参数的默认值

使用clang3.6.0,我无法编译以下代码示例。#includetemplateconstexprboolIS_SCALAR=::std::is_scalar::value;template>structClass_Breaks{};template::value>structClass_Works{};voidfunction(){Class_Breaksbreak_error;Class_Breaks>breaks_ok;Class_Worksok;}但是,返回以下错误消息:1>[66%]BuildingCXXobjectCMakeFiles/Core.dir/tests.cpp

c++ - 候选模板被忽略 : substitution failure(error with clang but not g++)

我有一个替换失败的问题,一些类似问题的答案对我没有帮助。代码如下:templateclassReference{public://...templateusingmatrix_t=int[r][c];Reference(constmatrix_t&mat){}};templateclassPartition{//...public://...templateusingmatrix=int[r][c];templatevoidreadPattern(constmatrix&pattern){//...}//...};我这样调用这个模板函数:intmain(){//...constintD

c++ - 模板参数推导 : which compiler is right here?

考虑以下代码:templateclassVector{};#includetemplatevoiddoWork(constVector&,conststd::array&){}intmain(){std::arrayarr;Vectorvec;doWork(vec,arr);}在这里Vector表示在第三方库中定义的类,std::array已知其元素计数为std::size_t.我试过用clang-3.6和g++-5.1编译它。Clang毫无怨言地工作,而g++给出以下错误:test.cpp:Infunction‘intmain()’:test.cpp:17:19:error:noma

c++ - 在可变参数模板模板参数中使用默认模板参数

我发现下面的最小示例适用于gcc和clang甚至VisualStudio,但它不能使用icc编译。我试图确定这是否是有效的C++,但我无法找到标准的相关部分来回答我的问题,因为这是几个不同概念的组合。//structwithmultipletemplateparameterstemplatestructC{};//structthattriestouseC'sdefaultsecondparameterwithoutspecifyingittemplateclassF>structG{Fh;};intmain(){Gi;}使用icc(16.0.3),编译会出现以下错误:struct.c