我正在阅读 Scott Meyers 的Effective C++。他在谈论特征类,我知道我需要它们在编译时确定对象的类型,但我无法理解他对这些类实际上做什么的解释?(从技术角度)
问问题
29753 次
2 回答
54
也许你期待某种使类型特征起作用的魔法。在这种情况下,请失望——没有魔法。类型特征是为每种类型手动定义的。例如,考虑为迭代器iterator_traits
提供 typedef(例如)。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;
// …
};
这是form 类型的部分特化,即一些泛型类型的指针。iterator_traits
T*
同样,iterator_traits
专门用于其他迭代器,例如typename vector<T>::iterator
.
于 2010-10-20T18:18:56.410 回答
43
特征类不决定对象的类型。相反,它们提供有关类型的附加信息,通常是通过在 trait 中定义 typedef 或常量。
于 2010-10-20T15:58:06.533 回答