STL——萃取机制(Traits)详解编程语言
编程语言 详解 机制 STL Traits
2023-06-13 09:11:47 时间
1.定义:traits中文意思是特性,它通过提取不同类的共性,使得可以统一处理。
2.技术实现:traits运用显式模板特殊化(模板偏特化,全特化)将代码中因为类型不同而发生变化的片段提取出来,用统一的接口来包装,并通过traits模板类公开的接口间接访问相应的类。
下面是STL萃取的片段代码
可能看的一头雾水,下面自己模拟实现一个就明白了
#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相关文章
- jquery操作checkbox详解编程语言
- 判断传入的参数是否为数字详解编程语言
- Java 中常用缓存Cache机制的实现详解编程语言
- ApiCloud重新定义移动应用开发详解编程语言
- python正则表达式+正则大量实例详解编程语言
- [javaSE] GUI(事件监听机制)详解编程语言
- SQLite读写同步之WAL机制详解编程语言
- JAVA中重写equals()方法的同时要重写hashcode()方法详解编程语言
- Java中的ReentrantLock和synchronized两种锁机制的对比详解编程语言
- Java异常机制详解编程语言
- python面试题大全(一)详解编程语言
- Hibernate之缓存机制(一级缓存)详解编程语言
- Java回调机制详细解析详解编程语言
- java两种同步机制的实现 synchronized和reentrantlock详解编程语言
- 必须知道的八大种排序算法【java实现】(一) 冒泡排序、快速排序详解编程语言
- Spring Cloud(一):概述以及核心成员介绍详解编程语言
- Java反射机制详解编程语言
- Spring Boot2.0之 整合Zookeeper集群详解编程语言
- JMS消息可靠机制详解编程语言
- ABAP 锁机制详解编程语言
- java中由类名和方法名字符串实现其调用【反射机制】详解编程语言
- SAP STO业务详解编程语言
- javascript 模仿块级作用域详解编程语言
- RC4加密详解编程语言
- python之ftp作业【还未完成】详解编程语言