zl程序教程

您现在的位置是:首页 >  其他

当前栏目

STL——萃取机制(Traits)详解编程语言

编程语言 详解 机制 STL Traits
2023-06-13 09:11:47 时间

1.定义:traits中文意思是特性,它通过提取不同类的共性,使得可以统一处理。

2.技术实现:traits运用显式模板特殊化(模板偏特化,全特化)将代码中因为类型不同而发生变化的片段提取出来,用统一的接口来包装,并通过traits模板类公开的接口间接访问相应的类。

下面是STL萃取的片段代码

STL——萃取机制(Traits)详解编程语言

 

STL——萃取机制(Traits)详解编程语言

 

 STL——萃取机制(Traits)详解编程语言

 

 可能看的一头雾水,下面自己模拟实现一个就明白了

#include iostream 

using namespace std; 

//类似迭代器模板类 

template class T 

struct MyIter { 

 typedef T value_type; 

 T* ptr; 

 MyIter(T* p = 0) : ptr(p) { } 

 T operator*() const { return *ptr; } 

//萃取用的结构体iter_traits 

template class I 

struct iter_traits { 

 typedef typename I::value_type value_type; 

//对于指针的范围偏特化 

template class I 

struct iter_traits I* { 

 typedef I value_type; 

//利用偏特化的萃取, MyType 萃取出了int 

template class O 

void func_trait(O ite) 

 typedef iter_traits O::value_type ::value_type MyType; 

 MyType a = **ite; 

 cout a; 

//普通版本的萃取,MyType萃取出了int* 

template class O 

void func(O ite) 

 typedef iter_traits O ::value_type MyType; 

 MyType a = reinterpret_cast MyType (**ite); 

 cout *ite endl; 

 cout **ite endl; 

int main() 

 int *a = new int(2); 

 MyIter int* ite( a); 

 func(ite); 

 func_trait(ite); 

 return 0; 

}

这里MyIter是个迭代器类模板,模板参数类型为T,main函数中这个T为int*, 那我们定义一个参数为int*的迭代器对象,对这个迭代器取内容就应该是int*,实际上是个指针, 这里定义了一个萃取用的结构体iter_traits,普通版的是做为萃取出int*这个类型,便于作为函数返回值或者是定义变量,偏特化版的用做萃取出int类型。

 

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/17584.html

cjava