参考原文:细说C++traits
C++之父给traits的定义:
Think of a trait as a small object whose main purpose is to carry information used by another object or algorithm to determine “policy” or “implementation details”. - Bjarne Stroustrup
STL中,算法和容器是分开设计的,问题是算法如何从容器中萃取容器元素的,这就需要用到Traits class。
模板的特化
函数的模板可以有一个通用的定义,然后,针对某一特定类型,可以存在一个特化的版本;
模板的偏特化
模板特化时,可以只指定一部分而非所有模板参数,或者是参数的一部分而非所有特性,这就叫做偏特化。
typename关键字
在模板声明中,typename
和class
的作用是一样的;
C++语言假定通过作用域运算符访问的名字不是类型。因此,如果我们想使用一个模板参数的类型成员,就必须显示告诉编译器该名字是一个类型。我们通过关键字typename
实现这一点。
实现traits Classes
参考原文链接