苏州网站优化维护,网站空间月流量,域名搜索软件最新免费版,360建筑网如何注销账号类型特性 类型特性定义一个编译时基于模板的结构#xff0c;以查询或修改类型的属性。
试图特化定义于 type_traits 头文件的模板导致未定义行为#xff0c;除了 std::common_type 可依照其所描述特化。
定义于type_traits头文件的模板可以用不完整类型实例…类型特性 类型特性定义一个编译时基于模板的结构以查询或修改类型的属性。
试图特化定义于 type_traits 头文件的模板导致未定义行为除了 std::common_type 可依照其所描述特化。
定义于type_traits头文件的模板可以用不完整类型实例化除非另外有指定尽管通常禁止以不完整类型实例化标准库模板。 类型属性
检查类型是否拥有强结构相等性
std::has_strong_structural_equality template class T struct has_strong_structural_equality; (C20 起)
若 T 拥有强结构相等性则提供等于 true 的成员常量 value 。对于任何其他类型 value 为 false 。
模板形参
T-要检查的类型
辅助变量模板 template class T inline constexpr bool has_strong_structural_equality_v has_strong_structural_equalityT::value; (C20 起)
继承自 std::integral_constant
成员常量 value [静态] 若 T 拥有强结构相等性则为 true 否则为 false (公开静态成员常量)
成员函数 operator bool 转换对象为 bool 返回 value (公开成员函数) operator() (C14) 返回 value (公开成员函数)
成员类型
类型定义value_typebooltypestd::integral_constantbool, value
注解
此类型特征可用于检查一个类型能否用作非类型模板形参。 调用示例
#include type_traits
#include cstring
#include algorithm
#include iostreamnamespace std
{
templatetypename... Ts struct make_void
{typedef void type;
};
templatetypename... Ts using void_t typename make_voidTs...::type;template typename T, typename void
struct has_strong_structural_equality : std::false_type {};template typename T
struct has_strong_structural_equalityT, std::void_tdecltype(std::declvalT() std::declvalT()) : std::true_type
{templatetypename, typenamestatic std::false_type test(...);using type decltype(testT, T(0));
};templatetypename T, typename U
using has_strong_structural_equality_t typename has_strong_structural_equalityT, U::type;template typename T
const bool has_strong_structural_equality_v has_strong_structural_equalityT::value;
}class E
{
public:templateclass T E(T) { }
};class A {};
class B : public A {};
class C {};
class D
{
public:operator C(){return c;} C c;
};struct MyStruct
{int x;double y;
};// 自定义比较运算符
bool operator(const MyStruct lhs, const MyStruct rhs)
{return lhs.x rhs.x lhs.y rhs.y;
}int main()
{std::cout std::boolalpha;std::cout std::has_strong_structural_equalityA::value: std::has_strong_structural_equalityA::value std::endl;std::cout std::has_strong_structural_equalityE::value: std::has_strong_structural_equalityE::value std::endl;std::cout std::has_strong_structural_equalityfloat::value: std::has_strong_structural_equalityfloat::value std::endl;std::cout std::has_strong_structural_equalityint::value: std::has_strong_structural_equalityint::value std::endl;std::cout std::has_strong_structural_equalitychar::value: std::has_strong_structural_equalitychar::value std::endl;std::cout std::has_strong_structural_equalitybool::value: std::has_strong_structural_equalitybool::value std::endl;std::cout std::has_strong_structural_equalityMyStruct::value: std::has_strong_structural_equalityMyStruct::value std::endl;std::cout ----------------------------------------------- std::endl;std::cout std::endl;return 0;
}输出
std::has_strong_structural_equalityA::value: false
std::has_strong_structural_equalityE::value: false
std::has_strong_structural_equalityfloat::value: true
std::has_strong_structural_equalityint::value: true
std::has_strong_structural_equalitychar::value: true
std::has_strong_structural_equalitybool::value: true
std::has_strong_structural_equalityMyStruct::value:true
-----------------------------------------------