这个问题本质上是另一个用户的这个问题的后续问题,它有一些很好的答案:Isitpossibletowriteatemplatetocheckforafunction'sexistence?我想做的正是这个问题中描述的,除了我希望能够为构造函数做这件事。例如,给定这两种类型:classNormalType{public:NormalType(){std::cout还有这个用于构造对象的辅助函数:templateclassConstructHelper{public:templatestaticTConstruct(){returnT();}templatestaticTConstruct(
为了支持可移植性,我想选择一个基于事实的常量size_t是32位还是64位。代码:usingnamespacestd;namespacedetail{template::value,void*>::type=nullptr>constexprstaticconstsize_tdefaultSizeHelper(){return((size_t)1::value,void*>::type=nullptr>constexprsize_tdefaultSizeHelper(){returnnumeric_limits::max()/2;}}constexprstaticsize_tdefau
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion在介绍概念和约束之前,有几种方法可以模拟这种编译时检查。以一个“order()”函数为例:(如何在没有概念和约束的情况下实现LessThanComparable是另外一回事了)使用static_asserttemplatevoidorder(T&a,U&b){static_assert(LessThanComparable,"ohthisisnotepic");if(b这种方法不适用于函数
我有一个模板,templateclasswrapper,我想根据typenameT::context_type的存在进行专攻.如果typenameT::context_type被声明,然后wrapper的构造函数和赋值运算符重载实例化应该接受强制typenameT::context_type范围。此外,wrapper对象将在成员数据中存储“上下文”。如果typenameT::context_type不存在,则重载wrapper的构造函数和赋值运算符将减少一个参数,并且不会有额外的数据成员。这可能吗?我可以在不更改config1的定义的情况下编译以下代码吗?,config2,和main(
我试图弄清楚是否可以使用sfinae来测试namespace成员的存在。谷歌对此保持沉默。我已经尝试了以下代码,但它失败了。namespacexyz{structabc{};}structabc{};structtest_xyz{typedefcharyes;typedefstruct{chara[2];}no;templatestaticyestest(xyz::C=xyz::C());//letsassumeithasdefaultconstructortemplatestaticnotest(...);constboolhas_abc=sizeof(test_xyz::test(
cppreference.com(http://en.cppreference.com/w/cpp/types/enable_if#Notes)指出:Acommonmistakeistodeclaretwofunctiontemplatesthatdifferonlyintheirdefaulttemplatearguments.Thisisillegalbecausedefaulttemplateargumentsarenotpartoffunctiontemplate'ssignature,anddeclaringtwodifferentfunctiontemplateswitht
我第一次尝试std::enable_if并且很挣扎。任何指导将不胜感激。作为玩具示例,这是一个简单的静态vector类,我想为其定义一个复制构造函数,但行为取决于vector的相对大小:只需将数据复制到更小或相同大小的vector中将数据复制到一个更大的vector中,然后用零填充其余部分所以vector类是:templateclassVector{double_data[_Size];public:Vector(){std::fill(_data,_data+_Size,0.0);}constdouble*data()const{return_data;}//...};复制构造函数应
所以基本上,我现在有一个非常基本的通用类,目前正在测试type_traitsheader。我目前正在尝试制作一个函数来处理某些类型,即现在的算术类型。#includetemplateclassTest{public:templatetypenamestd::enable_if::value>::typeprint();};该函数完美运行且仅适用于算术类型。但我喜欢保持我的类整洁,只有它们有原型(prototype),而函数实现在类之外。使用标准模板即voidtest();templatevoidTest::test(){}这很简单,我知道怎么做,但我不知道如何用“std::enable
我正在尝试在模板化结构中使用一些SFINAE。我将我的问题简化为以下内容并且可以完成这项工作:templatestructtest{voidmyfunc();};templatevoidtest::myfunc(){std::coutvoidtest::myfunc(){std::coutfoo;testbar;foo.myfunc();bar.myfunc();}使用这段代码,我得到了结果:testtruetestfalse但是,如果我想考虑我的structtest有多个模板参数,我尝试像这样调整上面的内容:templatestructtest{voidmyfunc();};temp
我编写了一个小实用程序来测试类型是否继承了特定模板类的某些模板实例化,直接继承或通过继承继承模板的类。这是通过使用模板函数的SFINAE检查来完成的,该模板函数接受所提供模板的任何模板实例化和默认情况下的回退重载。#include#includetemplateclassT,classU>structisDerivedFrom{staticconstexprboolvalue=decltype(isDerivedFrom::test(U()))::value;private:templatestaticstd::true_typetest(T);staticstd::false_typ