在表达类型特性时,标准库遵循一个常见做法:使用名称 type 表示类型,使用 value 表示值:
// 手动实现的 is_const<T> 和 remove_const<T> 特性
// (请使用 <type_traits> 中的标准版本,而不是自己编写!)
template <class> struct is_const {
static constexpr bool value = false; // 一般情况
};
// 针对 const 类型的特化
template <class T> struct is_const<const T> {
static constexpr bool value = true;
};
// 一般情况
template <class T> struct remove_const {
using type = T;
};
// 一般情况
template <class T> struct remove_const<const T> {
using type = T;
}
有时,许多类型特性返回的是布尔值。为了简化此类特性的编写,并确保这些特性的形式保持一致,你会在 <type_traits> 头文件中发现类型 std::true_type 和 std::false_type。这些类型可以看作是常量 true 和 false 在类型系统中的对应形式。
借助这些类型,可以将诸如 is_const 的特性重写:
#include <type_traits>
// 手动实现的 is_const<T> (更推荐使用 std:: 中的标准版本...)
template <class> struct is_const : std::false_type {
};
template <class T>
struct is_const<const T> : std::true_type {
};
这些类型既是一种便利,也是一种更清晰表达思想的方式。