【发布时间】:2011-04-28 03:26:54
【问题描述】:
我正在阅读 Scott Meyers 的 Effective C++。他在谈论特征类,我知道我需要它们在编译时确定对象的类型,但我无法理解他对这些类实际上做什么的解释? (从技术角度)
【问题讨论】:
我正在阅读 Scott Meyers 的 Effective C++。他在谈论特征类,我知道我需要它们在编译时确定对象的类型,但我无法理解他对这些类实际上做什么的解释? (从技术角度)
【问题讨论】:
也许你期待某种使类型特征起作用的魔法。在这种情况下,请失望——没有魔法。类型特征是手动为每种类型定义的。例如,考虑iterator_traits,它为迭代器提供类型定义(例如value_type)。
使用它们,您可以编写
iterator_traits<vector<int>::iterator>::value_type x;
iterator_traits<int*>::value_type y;
// `x` and `y` have type int.
但要实现这一点,<iterator> 标头中实际上有一个显式定义,其内容如下:
template <typename T>
struct iterator_traits<T*> {
typedef T value_type;
// …
};
这是iterator_traits 类型的部分特化,用于T* 形式的类型,即某些泛型类型的指针。
同样,iterator_traits 专门用于其他迭代器,例如typename vector<T>::iterator.
【讨论】:
std::underlying_type中不就是一种魔法吗?
std::underlying_type 就是其中之一。
特征类不决定对象的类型。相反,它们提供有关类型的附加信息,通常通过在 trait 中定义 typedef 或常量。
【讨论】: