c++ 泛型 之 TypeTraints
完整代码 在
http://download.csdn.net/detail/zhuyingqingfen/8457091
#ifndef TYPETRAITS_H_
#define TYPETRAITS_H_//只有声明,没有定义,它只能被用来表示“我不是个令人感兴趣的型别”。
class NullType;
//这是一个可被继承的合法型别,而且你可以传递EmptyType对象。
class EmptyType{};//1. 常整数 映射为型别
/*
根据不同的数值产生不同的型别。一般而言,符合下列条件便可使用Int2Type
1. 有必要根据某个编译期常数调用一个或数个不同的函数
2. 有必要在编译期实施“分派”(dispatch)(if else 型分派要求每个条件都要编译通过,而通过Int2Type不会产生类似问题,因为编译期不会去编译一个未被使用到的template函数(如果一个template的成员函数未曾被真正使用上,c++不会将它具现化)。
*/
template<int v>
struct Int2Type
{enum{value = v};
};//Type2Type 唯一作用就是消除重载函数的歧义(模棱两可)。// class template Type2Type
// Converts each type into a unique, insipid type
// Invocation Type2Type<T> where T is a type
// Defines the type OriginalType which maps back to Ttemplate <typename T>
struct Type2Type
{typedef T OriginalType;
};
//型别选择,根据第一个引数判断是用第二个参数还是第三个参数
template<bool flag,typename T,typename U>
struct Select
{typedef T Result;
};
template<typename T,typename U>
struct Select<false,T,U>
{typedef U Result;
};//Type Traitstemplate <class T>
class TypeTraints
{
private:template<class U>struct PointerTraints{enum{result = false};typedef NullType PointerType;};template<class U>struct PointerTraints<U*>{enum{result = true;};typedef U PointerType;};template<class U>struct PtoMTraits{enum{result = false};};template<class U,class V>struct PtoMTraits<U V::*>{enum{result = true};};
public:enum{isPointer = PointerTraints<T>::result,isMemberPointer = PtoMTraits<T>::result};typedef typename PointerTraints<T>::PointerType PointerType;
};#endif
测试
void typetraits_test()
{const bool isPointer = TypeTraints<std::vector<int>::iterator>::isPointer;
}
c++ 泛型 之 TypeTraints相关推荐
- 【C#】集合_哈希表_字典_泛型_文件
数组能做到:存放同种类型数据,且数据个数确定 object类型的数组能满足:放各种类型的数据,确定放多少个,但是随意插入元素,数组做不到 集合能做到:存放各种数据类型,且不确定存放多少个,能做到随意插 ...
- 2021年大数据常用语言Scala(三十六):scala高级用法 泛型
目录 泛型 定义一个泛型方法 定义一个泛型类 上下界 协变.逆变.非变 非变 协变 逆变 泛型 scala和Java一样,类和特质.方法都可以支持泛型.我们在学习集合的时候,一般都会涉及到泛型. sc ...
- 对比两个同类型的泛型集合并返回差异泛型集合 ——两个List类名的比较
1: /// <summary> 2: /// 对比两个同类型的泛型集合并返回差异泛型集合 3: /// </summary> 4: /// <typeparam nam ...
- 利用委托和泛型实现树的常用操作
在日常开发中,经常遇到对树的操作,我们可以利用泛型和委托对这些树进行操作,这样就不需要每有一个树就要实现相应的功能了. 源码在http://files.cnblogs.com/haiconc/Lang ...
- java 泛型 父子,Java泛型-mb601cf8a78cc07的博客-51CTO博客
Java泛型 泛型类 即把不确定的数据元素类型用一个泛型占位符表示@Data public class Person { private T name; private T address; }Per ...
- java 泛型 .net_Java基础11:Java泛型详解
本文对java的泛型的概念和使用做了详尽的介绍. 本文参考https://blog.csdn.net/s10461/article/details/53941091 具体代码在我的GitHub中可以找 ...
- java 获取泛型的type,如何获取泛型的Type类型
开发中很多时候都遇到或使用到泛型.例如在json转换成bean对象或其他对象,而对象中存在泛型,这时候需要用到TypeToken. Type:是java里的 java.lang.reflect.Typ ...
- Java中创建泛型数组
Java中创建泛型数组 使用泛型时,我想很多人肯定尝试过如下的代码,去创建一个泛型数组 T[] array = new T[]; 当我们写出这样的代码时编译器会报Cannot create a gen ...
- 第八章 泛型程序设计
1.带有[超类型限定 super]的通配符可以向泛型对象写入,带有[子类型限定 extends]的通配符可以从泛型对象读取,反之则不然. 转载于:https://www.cnblogs.com/bao ...
最新文章
- asp.net python 开发web 效率_【Django】Python web开发:几个模板系统的性能对比(转)...
- Python多线程thread与threading实现
- 多线程Socket的InputStream的困扰一天才解决的问题
- Python学习:numpy的使用技巧和注意
- nmap常用的扫描命令
- java虚拟机和javaGC_Java虚拟机(三):GC算法和种类
- Spring MVC 5 + Thymeleaf 基于Java配置和注解配置
- 小米登录协议分析_联想前副总裁常程跳槽小米数月后,波澜再起
- 训练日志 2018.10.24
- 2017.8.20 后缀自动机(p3804) 思考记录
- python中lower()函数的用法
- TensorFlow 2.0 Alpha 版发布啦!
- vscode调用keil-MDK编译程序
- 使用curl完成POST数据给飞信接口
- matlab神经网络应用设计 张德丰,MATLAB神经网络应用设计
- 反欺诈概念库-物联卡/物联网卡/流量卡
- DoDataExchange(CDataExchange* pDX)没有执行到原因
- spark mlib系列2
- 26_ue4进阶末日生存游戏开发[僵尸添加动画和扣血效果]
- 软件实施工程师需要掌握的技能