特质类如何工作?
我正在阅读Scott Meyers的Effective C ++ 。 他正在谈论特质类,我知道我需要他们在编译期间确定对象的types,但我不明白他对这些类实际做什么的解释? (从技术angular度来看)
也许你正在期待某种使types特征起作用的魔法。 在这种情况下,失望 – 没有魔法。 types特征是为每种types手动定义的。 例如,考虑iterator_traits
,它为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.
但是为了实现这个function,在<iterator>
头文件中实际上有一个明确的定义 ,其内容如下:
template <typename T> struct iterator_traits<T*> { typedef T value_type; // … };
这是针对T*
formstypes的iterator_traits
types的部分特殊化 ,即某些genericstypes的指针。
同样, iterator_traits
专门用于其他迭代器,例如typename vector<T>::iterator
。
特质类不确定对象的types。 相反,它们提供了关于types的附加信息,通常通过在特征中定义typedef或常量。