特质类如何工作?

我正在阅读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_traitstypes的部分特殊化 ,即某些genericstypes的指针。

同样, iterator_traits专门用于其他迭代器,例如typename vector<T>::iterator

特质类不确定对象的types。 相反,它们提供了关于types的附加信息,通常通过在特征中定义typedef或常量。