标准类型特征
Version >= C++ 11
type_traits
头包含一组模板类和帮助程序,用于在编译时转换和检查类型的属性。
这些特征通常用于模板中以检查用户错误,支持通用编程并允许优化。
大多数类型特征用于检查类型是否符合某些标准。它们具有以下形式:
template <class T> struct is_foo;
如果模板类使用满足某些标准 foo
的类型进行实例化,则 is_foo<T>
继承自 std::integral_constant<bool,true>
(aka std::true_type
),否则它继承自 std::integral_constant<bool,false>
(aka std::false_type
)。这给了特征以下成员:
常量
static constexpr bool value
true
如果 T
符合标准 foo
,false
否则
功能
operator bool
返回 value
Version => C++ 14
bool operator()
返回 value
类型
名称 | 定义 |
---|---|
value_type |
bool |
type |
std::integral_constant<bool,value> |
然后可以将该性状用于诸如 static_assert
或 std::enable_if
的构建体中 。std::is_pointer
的一个例子:
template <typename T>
void i_require_a_pointer (T t) {
static_assert(std::is_pointer<T>::value, "T must be a pointer type");
}
//Overload for when T is not a pointer type
template <typename T>
typename std::enable_if<!std::is_pointer<T>::value>::type
does_something_special_with_pointer (T t) {
//Do something boring
}
//Overload for when T is a pointer type
template <typename T>
typename std::enable_if<std::is_pointer<T>::value>::type
does_something_special_with_pointer (T t) {
//Do something special
}
还有各种改变类型的特征,例如 std::add_pointer
和 std::underlying_type
。这些特征通常暴露单个 type
成员类型,其中包含转换类型。例如,std::add_pointer<int>::type
是 int*
。