草庐IT

typetraits

全部标签

c++ - 为什么 C+ +'s ` 变量模板的行为不符合预期?

#includetemplatestructremove_cvref{usingtype=std::remove_cv_t>;};templateusingremove_cvref_t=typenameremove_cvref::type;templateconstexprboolisCc=std::is_copy_constructible_v>;classAfinal{public:A()=default;template>//errorA(T&&){}};Af(){Aa;returna;}intmain(){}错误信息:error:constexprvariable'isCc'm

c++ - 如何实现 is_enum_class 类型特征?

这个问题在这里已经有了答案:Isitpossibletodetermineifatypeisascopedenumerationtype?(2个答案)关闭4年前。当且仅当传入的类型T是类枚举时,如何实现其值成员为true的类型特征?虽然我知道例如+T{};如果T是一个枚举会工作,如果它是一个枚举类则会失败,到目前为止我找不到将它用于SFINAE的方法。

c++ - 如何以标准方式组合 type_traits 中的条件

例如,我想使用类型T仅当std::is_pointer和std::is_const评估为true_type.当然还有一个简单的方法是这样的:templatevoidf(Tt,std::true_type,std::true_type){}templatevoidf(Tt){f(t,std::is_pointer{},std::is_const{});}但是我想要这样的东西:templatevoidf(Tt,std::true_type){}templatevoidf(Tt){f(t,std::and,std::is_const>{});}标准库是否包含类似std::and的内容??如果

c++ - 标准的 c++11 方法来删​​除一个类型的所有指针

有没有办法用一些c++11或至多一个boost库来做到这一点?#include#includeusingnamespacestd;templateclassremove_all_pointers{public:typedefTtype;};templateclassremove_all_pointers{public:typedeftypenameremove_all_pointers::typetype;};intmain(){//correctlyprints'i'ongcccout::type).name() 最佳答案 这并不

c++ - 检查模板类的某些特化是否是特定类的基类的特征

现代STL中有std::is_base_of。它允许我们确定第二个参数是否派生自第一个参数,或者它们是否是相同的类,否则,确定它们之间是否没有这种关系。是否可以在不区分其特化涉及哪些具体实际参数的情况下确定一个类是否派生自某个具体模板类?说,我们有;templatestructB{};和templatestructD:B{};是否可以定义类型特征:templateis_derived_from_B;当T是D的任何特化并从std::派生时,它从std::true_type派生:false_type如果T不是从B的任何特化派生的? 最佳答案

c++ - std::common_type 实现

为了了解它是如何工作的,我查看了标题type_traits中std::common_type的libstdc++实现。我不得不承认我并不真正理解它是如何工作的。在这里:///common_typetemplatestructcommon_type;templatestructcommon_type{typedef_Tptype;};templatestructcommon_type{typedefdecltype(true?declval():declval())type;};templatestructcommon_type{typedeftypenamecommon_type::t

c++ - 编译时模板实例化检查

是否可以在编译时检查模板类型是否已实例化,以便我可以在enable_if特化中使用此信息?假设我有templatestructknown_type{};如果known_type在编译时被实例化,我能否以某种方式定义其值为true的is_known_type? 最佳答案 如果您利用在constexpr的地方可能会或可能不会使用特定表达式这一事实,就可以做到这一点。s是预期的,您可以查询以查看您拥有的每个候选人的状态。特别是在我们的案例中,constexpr没有定义的s不能作为常量表达式和noexcept传递是常量表达式的保证。因此,n

c++ - 如果为 false,则 std::is_member_function_pointer 不编译

我在寻找什么:我有一个模板化类,如果该类具有所需的函数,我想调用一个函数,例如:templatedo_something(){ifconstexpr(std::is_member_function_pointer::value){this->_t->x();//_tistypeofT*}}会发生什么:如果T没有带来函数,编译器就不会编译。小例子:#include#includeclassFoo{public:voidx(){}};classBar{};intmain(){std::cout::value::value编译器说:is_member_function_pointer.cpp

c++ - 如何测试方法是否为const?

如何获取一个bool值来指示已知方法是否具有const限定符?例如:structA{voidmethod()const{}};structB{voidmethod(){}};booltestA=method_is_const::value;//ShouldbetruebooltestB=method_is_const::value;//Shouldbefalse在type_traitsheader我找到了一个is_const我可以使用测试,但我需要方法类型,但我不确定如何获取它。我试过:std::is_const::value但它不起作用,我能理解为什么(void(*ptr)()con

c++ - 如何初始化类型特征的静态 std::unordered_map?

给定以下类型特征,我如何用一些std::pair初始化Fields?templatestructManagerDataTrait{staticconststd::unordered_mapFields;//...};我尝试使用lambda,但VisualStudio说Fields不是可以明确专门化的实体。templateconststd::unordered_mapManagerDataTrait::Fields=[]{std::unordered_mapfields;fields.insert(std::make_pair("height","FLOAT"));fields.inse