在C++11标准的细化过程中,好像是is_trivially_destructible被认为是比has_trivial_destructor更好/更一致的名称.这是一个相对较新的开发,因为我的g++4.7.1仍然使用旧名称,并且它已被修复以符合4.8的标准:http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52702我一直懒洋洋地使用#if,它有利于我使用的编译器:#ifTRIVIAL_DESTRUCTOR_TYPE_TRAIT_MATCHES_STANDARDtemplateusingis_trivially_destructible=std::
我知道setter/getter通常不好,但在这里,我只是用一个来说明一个更普遍的问题。考虑以下类:templateclassmy_tuplefinal{private:std::tuple_data;public:templatemy_tuple(U&&...u):_data(std::forward(u)...){}public:templateautoget()->decltype(std::get(_data)){returnstd::get(_data);}};考虑到我不能修改这个类。有没有办法,写一个外部元函数my_tuple_type(我所说的外部是指不属于该类的元函数)
这个问题在这里已经有了答案:Whydoesis_constructibleclaimsomethingisconstructiblewhenitisn't?(2个答案)关闭6年前。源自thisCodeReview主题:#include#include#include#include#includetemplateclassaggregate_wrapper:publicT{private:usingbase=T;public:usingaggregate_type=T;templateaggregate_wrapper(Ts&&...xs):base{std::forward(xs).
我经常在模板代码中看到此{}的出现。我不确定我明白它在做什么。例如:std::enable_if_t{}&&!std::is_same{}>>这里的{}是什么?它是在实例化类型吗?模板参数是什么意思?据我所知,实例化一个类型意味着创建一个对象。您如何在这种情况下创建对象?它只是创建一个虚拟对象吗?为什么要这样做?这样做的意义和目的是什么? 最佳答案 在这种情况下,type_trait{}相当于type_trait::value.您的示例等效于以下内容:std::enable_if_t::value&&!std::is_same::v
这是问题Howtocheckifobjectisconstornot?的衍生问题.看到下面的程序我很惊讶#include#includeintmain(){std::cout::value产生了这个输出false在什么情况下可以将constint&视为非常量类型? 最佳答案 也许通过这个例子会更容易理解std::cout::value::value输出:falsetrue第一种类型是指向constint的指针,而在第二种类型中,int*本身是const。因此它的结果是true而前者是false。同样,您对constint的引用。如果
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:IsitpossibletowriteaC++templatetocheckforafunction'sexistence?是否可以使用boost类型特征或其他机制来检查特定模板参数是否具有运算符/函数,例如std::vector作为模板参数有operator[],而std::pair没有。
在下面的代码中,我使用了std::remove_const和std::remove_reference但在两种情况下以不同的顺序给出了不同的结果:#include#include#include#include#includeusingnamespacestd;intmain(){vectorar={"mnciitbhu"};cout::type>::typeTT;cout::value::value::value::type>::typeTT;cout::value::value::value输出是:Firstcase:truefalsefalseSecondcase:falsetr
C++11为我们如何处理枚举引入了两个不同的补充:一个使它们具有作用域的选项,一个使它们有类型的选项。所以现在我们有四种不同的枚举子类型:enumOld{};enumTyped:int8_t{};enumclassScoped{};enumclassTypedScoped:int8_t{};Thisquestion询问如何确定枚举是否有范围。我想知道如何判断枚举是否有类型。附加信息我使用Qt框架,它提供了QDataStream类,用于以可移植的跨平台方式序列化/反序列化数据。显然,为了使生成的数据流可移植,您必须以固定长度的形式存储所有整数。这也包括枚举。过去,我制作了几个辅助宏来定义
我正在尝试实现has_equal_operator在C++11中,到目前为止提出了以下解决方案。它适用于像int这样的简单情况或structA{}但对于std::vector失败(返回误报).为什么会失败以及如何解决这个问题?#include#includetemplateconstexprautohas_equal_operator(int)->decltype(std::declval()==std::declval(),bool()){returntrue;}templateconstexprboolhas_equal_operator(...){returnfalse;}str
这个问题在这里已经有了答案:Whatdoesadd_lvalue_referencedo?(1个回答)关闭8年前。例如templatestructRef{usingtype=T&;};是Ref::type与std::add_lvalue_reference::type相同对于所有可能的模板参数?例如。int,int&,和int&&?我刚刚阅读了std::add_lvalue_reference的源代码.很确定它们是等价的。如果它们是等价的,我们可以通过简单地写出T&来节省一些空间。相反。