类型萃取&类的模板特化
来源:互联网 发布:淘宝妈妈网站推广 编辑:程序博客网 时间:2024/06/06 08:30
类模板的特化
1、全特化
2、偏特化(局部特化)
1、全特化
template <>class Data<int, char>{public : Data() { cout<<"Data(int, char)"<<endl; }private : int _d1 ; char _d2 ;};
2、偏特化(局部特化)
偏特化分为两种
1特化部分参数
template <class T1>class Data<T1, double>{public : Data() { cout<<"Data(T1, double)"<<endl; }private : T1 _d1 ; char _d2 ;};
2.参数指定特定类型
template <class T1, class T2>class Data<T1*, T2*>{public : Data() { cout<<"Data(T1*, T2*)"<<endl; }private : T1 _d1 ; T2* _d2 ;};
template <class T1, class T2>class Data<T1&, T2&>{public: Data(const T1& d3) :_d3(d3) { cout << "Data(T1&, T2&)" << endl; }private: T1* _d1; T2* _d2; const T1& _d3; //T2& _d4;引用必须初始化};
特化可以说就是模板的一种特殊化
所以模板的全特化和偏特化都是在已定义的模板基础之上,不能单独存在。
void test(){ Data<int, int> d1; Data<int, char> d2; Data<int, double> d3; Data<int*, double*> d4; Data<int*, int*> d5; Data<int&, int&> d6(10);}
类型萃取
template<class T>struct __TypeTraits{ typedef __FalseType IsPODType; // 内嵌重定义};template<>struct __TypeTraits<int>{ typedef __TrueType IsPODType; };
template<>struct __TypeTraits<char>{ typedef __TrueType IsPODType; };template<>struct __TypeTraits<double>{ typedef __TrueType IsPODType; };
这里我们用顺序表copy时,对于不同类型,不同的拷贝方式来举例
template<class T>T* __TypeCopy(T* dst, const T* src, size_t n, __TrueType){ // int 、char... cout<<"memcpy"<<endl; return (T*)memcpy(dst, src, n*sizeof(T));}template<class T>T* __TypeCopy(T* dst, const T* src, size_t n, __FalseType){ // string cout<<"for+operator="<<endl; for (size_t i = 0; i < n; ++i) { dst[i] = src[i]; // operator= } return dst;}
template<class T>T* TypeCopy(T* dst, const T* src, size_t n){ return __TypeCopy(dst, src, n, __TypeTraits<T>::IsPODType());}
阅读全文
0 0
- 类型萃取&类的模板特化
- 模板的特化和萃取
- 通过模板的特化实现 简单的类型萃取 实现memcppy时候对于特殊类型如string类的拷贝。
- 模板的类型萃取
- 模板的类型萃取
- 模板的类型萃取
- 模板的类型萃取
- 模板的类型萃取
- C++模板类的类型萃取技术
- 【干货】C++通过模板特化实现类型萃取实例--实现区分基本类型与自定义类型的memcpy
- c++:模板的类型萃取
- c++:模板的类型萃取
- 关于C++的模板偏特化和萃取编程技法
- 模板偏特化 指针 模板萃取 指针
- 模板偏特化 指针 模板萃取 指针
- 模版/模版函数的全特化/偏特化与类型萃取技术
- 类模板的特化
- 类模板的特化
- [工具]Window网速监控统计
- 命令行编译C语言Hello World的过程
- Nginx负载均衡选项upstream用法举例
- java之获取中文全拼/首字母工具(大小写转换)
- 第一章、Tiny4412 U-BOOT移植一 说明
- 类型萃取&类的模板特化
- UBUNTU adb连接android设备
- struts的搭建及简单理解
- 11g GRID的结构和管理总结
- C语言基础知识
- PHP常见规范
- 基于点和线特征的实时单目SLAM
- Android程序隐藏系统自带的标题栏
- Kylin 安装以及spark cube 的创建