Traits
Traits技术是STL中比较常见的一种C++语言技巧表达方式之一,通过C++模板的能力,将对象类型萃取出来,让同一个接口实现对应的功能。特别是在算法和容器中,可以解耦出具体的对象类型,使得两者通过迭代器实现链接。
Traits技巧之入门
C++中通过使用迭代器,将STL中的容器和算法相解耦,在C++中编译器编译器需要考虑相应的型别判断。
形参型别推导
首先我们通过模板获取形参的数据类型
// 通过class 自动推导iter类型和*iter类型
template<class T>
void func(I iter) {
func_tmpl(iter, *iter);
}
template<class I, class T>
void func_tmpl(I iter, T t){
T tmp;
}
int main(){
int i;
func(&i);
}
对于形参类型的类型推导,这是最简单的方式
返回值型别推导
但是模板参数不能简单地通过类型返回
template<class T>
(*T) func(T t){
T tmp;
}
这样会编译失败,对于返回值的型别推导,STL的做法是在内部声明的迭代器中,构造一个类型,通过模板推导出返回类型
template<class T>
struct Iter_traits{
typedef T value_type;
T* ptr;
Iter_traits(T* p =</