初级程序员与网站开发,sap.net网站开发,校园网站制作模板,oracle网站开发类型特性 类型特性定义一个编译时基于模板的结构#xff0c;以查询或修改类型的属性。
试图特化定义于 type_traits 头文件的模板导致未定义行为#xff0c;除了 std::common_type 可依照其所描述特化。
定义于type_traits头文件的模板可以用不完整类型实例…类型特性 类型特性定义一个编译时基于模板的结构以查询或修改类型的属性。
试图特化定义于 type_traits 头文件的模板导致未定义行为除了 std::common_type 可依照其所描述特化。
定义于type_traits头文件的模板可以用不完整类型实例化除非另外有指定尽管通常禁止以不完整类型实例化标准库模板。 类型属性 定义于头文件 type_traits 基础类型类别 继承自 std::integral_constant
成员常量 value [静态] 若 T 为联合体类型则为 true 否则为 false (公开静态成员常量)
成员函数 operator bool 转换对象为 bool 返回 value (公开成员函数) operator() (C14) 返回 value (公开成员函数)
成员类型
类型定义value_typebooltypestd::integral_constantbool, value 检查类型是否为联合体类型
std::is_union template class T struct is_union; (C11 起)
检查 T 是否为联合体类型。若 T 为联合体类型则提供等于 true 的成员常量 value 。否则 value 等于 false 。
模板形参
T-要检查的类型
辅助变量模板 template class T inline constexpr bool is_union_v is_unionT::value; (C17 起) 检查类型是否非联合类类型
std::is_class template class T struct is_class; (C11 起)
检查 T 是否为非联合类类型。若 T 为类类型但非联合体则提供等于 true 的成员常量 value 。否则 value 等于 false 。
注意以 struct 关键词声明的类型是类故此特性对“结构体”为 true 。
模板形参
T-要检查的类型
辅助变量模板 template class T inline constexpr bool is_class_v is_classT::value; 可能的实现
namespace detail {template class T char test(int T::*);struct two { char c[2]; };template class T two test(...);
}template class T
struct is_class : std::integral_constantbool, sizeof(detail::testT(0))1 !std::is_unionT::value {}; 检查是否为函数类型
std::is_function template class T struct is_function; (C11 起)
检查 T 是否为函数类型。如 std::function 、 lambda 、有重载 operator() 的类和指向函数指针不是函数类型。若 T 为函数类型则提供等于 true 的成员常量 value 。否则 value 等于 false 。
模板形参
T-要检查的类型
辅助变量模板 template class T inline constexpr bool is_function_v is_functionT::value; (C17 起) 可能的实现
// 初等模板
templateclass
struct is_function : std::false_type { };// 对常规函数的特化
templateclass Ret, class... Args
struct is_functionRet(Args...) : std::true_type {};// 对变参数函数如 std::printf 的特化
templateclass Ret, class... Args
struct is_functionRet(Args......) : std::true_type {};// 对拥有 cv 限定符的函数类型的特化
templateclass Ret, class... Args
struct is_functionRet(Args...) const : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args...) volatile : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args...) const volatile : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args......) const : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args......) volatile : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args......) const volatile : std::true_type {};// 对拥有引用限定符的函数类型的特化
templateclass Ret, class... Args
struct is_functionRet(Args...) : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args...) const : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args...) volatile : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args...) const volatile : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args......) : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args......) const : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args......) volatile : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args......) const volatile : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args...) : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args...) const : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args...) volatile : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args...) const volatile : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args......) : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args......) const : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args......) volatile : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args......) const volatile : std::true_type {};// 对所有以上的 noexcept 版本的特化 C17 及之后templateclass Ret, class... Args
struct is_functionRet(Args...) noexcept : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args......) noexcept : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args...) const noexcept : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args...) volatile noexcept : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args...) const volatile noexcept : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args......) const noexcept : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args......) volatile noexcept : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args......) const volatile noexcept : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args...) noexcept : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args...) const noexcept : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args...) volatile noexcept : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args...) const volatile noexcept : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args......) noexcept : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args......) const noexcept : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args......) volatile noexcept : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args......) const volatile noexcept : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args...) noexcept : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args...) const noexcept : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args...) volatile noexcept : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args...) const volatile noexcept : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args......) noexcept : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args......) const noexcept : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args......) volatile noexcept : std::true_type {};
templateclass Ret, class... Args
struct is_functionRet(Args......) const volatile noexcept : std::true_type {}; 调用示例
#include iostream
#include type_traitsstruct A {};typedef union
{int a;float b;
} B;struct C
{B d;
};enum E {};enum class Ec : int {};struct D
{int fun() const;
};templatetypename
struct PM_traits {};templateclass T, class U
struct PM_traitsU T::*
{using member_type U;
};int f();int main()
{std::cout std::boolalpha;std::cout std::is_unionA::value: std::is_unionA::value std::endl;std::cout std::is_unionB::value: std::is_unionB::value std::endl;std::cout std::is_unionC::value: std::is_unionC::value std::endl;std::cout std::is_unionint::value: std::is_unionint::value std::endl;std::cout std::is_unionfloat::value: std::is_unionfloat::value std::endl;std::cout std::endl;std::cout std::is_classA::value: std::is_classA::value std::endl;std::cout std::is_classB::value: std::is_classB::value std::endl;std::cout std::is_classC::value: std::is_classC::value std::endl;std::cout std::is_classint::value: std::is_classint::value std::endl;std::cout std::is_classfloat::value: std::is_classfloat::value std::endl;std::cout std::endl;std::cout std::is_functionA::value: std::is_functionA::value std::endl;std::cout std::is_functionint(int)::value: std::is_functionint(int)::value std::endl;std::cout std::is_functiondecltype(f)::value: std::is_functiondecltype(f)::value std::endl;std::cout std::is_functionint::value: std::is_functionint::value std::endl;using T PM_traitsdecltype(D::fun)::member_type; // T 为 int() conststd::cout std::is_functionT::value: std::is_functionT::value std::endl;std::cout std::endl;return 0;
}
输出