类型萃取
2017-08-03 11:31
127 查看
#include<iostream> #include<stdlib.h> #include<string.h> using namespace std; class Truetype { public: bool Get() { return true; } }; class Falsetype { public: bool Get() { return false; } }; template<class T> class TypeTraits { public: typedef Falsetype IsPOD; }; template<> class TypeTraits<int> { public: typedef Truetype IsPOD; }; template<> class TypeTraits<char> { typedef Truetype IsPOD; }; template<> class TypeTraits<short> { public: typedef Truetype IsPOD; }; //使用参数推导的萃取处理 template<class T> void _COPY(T*dst,T*src,size_t size,Truetype) { cout<<"TureType:" <<typeid( T).name ()<<endl; memcpy(dst,src,size*sizeof(T)); } template<class T> void _COPY(T*dst,T*src,size_t size,Falsetype) { cout<<"FalseType:" <<typeid( T).name ()<<endl; for(i=0;i<size;++i) { dst[i]=src[i]; } } //使用萃取判断类型的Get函数判断是否是 POD类型来处理 template<class T> void _COPY(T*dst,T*src,size_t size) { cout<<"TrueType:" <<typeid( T).name ()<<endl; if(TypeTraits<T>::IsPOD().Get()) { memcpy(dst,src,size*sizeof(T)); } else { for(int i=0;i<size;++i) { dst[i]=src[i]; } } } void main() { int arr[10]={1,2,3,4,5}; int arr1[10]={}; string s1[10]={"ab","abc","bc"}; string s2[10]={}; /*_COPY(arr1,arr,10,TypeTraits<int>::IsPOD());*/ _COPY(arr1,arr,10); for(int i=0;i<10;++i) { cout<<arr1[i]; } _COPY(s2,s1,10); system("pause"); }
相关文章推荐
- 【干货】C++通过模板特化实现类型萃取实例--实现区分基本类型与自定义类型的memcpy
- C++的类型萃取技术
- 模拟实现vector(迭代器,类型萃取)
- 关于C++类型萃取
- 模板的类型萃取
- C++类型萃取
- 【代码】模板实现动态线性表(无类型萃取)
- C++实现Vector->类型萃取和List->迭代器
- 关于类型萃取
- c++::关于类型萃取
- 类型萃取
- C++类型萃取技术
- c++:模板的类型萃取
- 【代码】模板动态线性表&类型萃取
- 通过模板的特化实现 简单的类型萃取 实现memcppy时候对于特殊类型如string类的拷贝。
- 【代码】模板实现动态线性表(无类型萃取)
- C++ 模板类型萃取技术 第一部分 为什么要有萃取技术
- C++的类型萃取技术
- 第18课 类型萃取(2)_获取返回值类型的traits
- C++的类型萃取技术