我正在阅读Scott Meyers的Effective C++.他正在谈论traits类,我知道我需要它们来确定编译期间对象的类型,但我无法理解他对这些类实际做什么的解释?(从技术角度来看)
Kon*_*lph 51
也许你期待某种使类型特征发挥作用的魔法.在那种情况下,失望 - 没有魔力.为每种类型手动定义类型特征.例如,考虑一下iterator_traits,它value_type为迭代器提供了typedef(例如).
使用它们,你可以写
iterator_traits<vector<int>::iterator>::value_type x;
iterator_traits<int*>::value_type y;
// `x` and `y` have type int.
Run Code Online (Sandbox Code Playgroud)
但为了使这个工作,在标题中的某个地方实际上有一个明确的定义<iterator>,其内容如下:
template <typename T>
struct iterator_traits<T*> {
typedef T value_type;
// …
};
Run Code Online (Sandbox Code Playgroud)
这是一个部分特的的iterator_traits类型为类型形式的T*,一些一般类型的,即指针.
同样,iterator_traits它专门用于其他迭代器,例如typename vector<T>::iterator.