完整代码 在

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相关推荐

  1. 【C#】集合_哈希表_字典_泛型_文件

    数组能做到:存放同种类型数据,且数据个数确定 object类型的数组能满足:放各种类型的数据,确定放多少个,但是随意插入元素,数组做不到 集合能做到:存放各种数据类型,且不确定存放多少个,能做到随意插 ...

  2. 2021年大数据常用语言Scala(三十六):scala高级用法 泛型

    目录 泛型 定义一个泛型方法 定义一个泛型类 上下界 协变.逆变.非变 非变 协变 逆变 泛型 scala和Java一样,类和特质.方法都可以支持泛型.我们在学习集合的时候,一般都会涉及到泛型. sc ...

  3. 对比两个同类型的泛型集合并返回差异泛型集合 ——两个List类名的比较

    1: /// <summary> 2: /// 对比两个同类型的泛型集合并返回差异泛型集合 3: /// </summary> 4: /// <typeparam nam ...

  4. 利用委托和泛型实现树的常用操作

    在日常开发中,经常遇到对树的操作,我们可以利用泛型和委托对这些树进行操作,这样就不需要每有一个树就要实现相应的功能了. 源码在http://files.cnblogs.com/haiconc/Lang ...

  5. java 泛型 父子,Java泛型-mb601cf8a78cc07的博客-51CTO博客

    Java泛型 泛型类 即把不确定的数据元素类型用一个泛型占位符表示@Data public class Person { private T name; private T address; }Per ...

  6. java 泛型 .net_Java基础11:Java泛型详解

    本文对java的泛型的概念和使用做了详尽的介绍. 本文参考https://blog.csdn.net/s10461/article/details/53941091 具体代码在我的GitHub中可以找 ...

  7. java 获取泛型的type,如何获取泛型的Type类型

    开发中很多时候都遇到或使用到泛型.例如在json转换成bean对象或其他对象,而对象中存在泛型,这时候需要用到TypeToken. Type:是java里的 java.lang.reflect.Typ ...

  8. Java中创建泛型数组

    Java中创建泛型数组 使用泛型时,我想很多人肯定尝试过如下的代码,去创建一个泛型数组 T[] array = new T[]; 当我们写出这样的代码时编译器会报Cannot create a gen ...

  9. 第八章 泛型程序设计

    1.带有[超类型限定 super]的通配符可以向泛型对象写入,带有[子类型限定 extends]的通配符可以从泛型对象读取,反之则不然. 转载于:https://www.cnblogs.com/bao ...

最新文章

  1. asp.net python 开发web 效率_【Django】Python web开发:几个模板系统的性能对比(转)...
  2. Python多线程thread与threading实现
  3. 多线程Socket的InputStream的困扰一天才解决的问题
  4. Python学习:numpy的使用技巧和注意
  5. nmap常用的扫描命令
  6. java虚拟机和javaGC_Java虚拟机(三):GC算法和种类
  7. Spring MVC 5 + Thymeleaf 基于Java配置和注解配置
  8. 小米登录协议分析_联想前副总裁常程跳槽小米数月后,波澜再起
  9. 训练日志 2018.10.24
  10. 2017.8.20 后缀自动机(p3804) 思考记录
  11. python中lower()函数的用法
  12. TensorFlow 2.0 Alpha 版发布啦!
  13. vscode调用keil-MDK编译程序
  14. 使用curl完成POST数据给飞信接口
  15. matlab神经网络应用设计 张德丰,MATLAB神经网络应用设计
  16. 反欺诈概念库-物联卡/物联网卡/流量卡
  17. DoDataExchange(CDataExchange* pDX)没有执行到原因
  18. spark mlib系列2
  19. 26_ue4进阶末日生存游戏开发[僵尸添加动画和扣血效果]
  20. 软件实施工程师需要掌握的技能

热门文章

  1. 平安保险公司软件测试机试题
  2. MAC结合LINUX进行Jmeter进行java代码压力测试
  3. 分支语句和循环语句[一]【详解】
  4. 理解线性变换和基(坐标)变换
  5. SOLID原理的详细信息。
  6. MindSpore实现手写数字识别
  7. 哥德巴赫猜想(升级版)
  8. 百万excel导入mysql_百万级xlsx表格导入数据库的实现方案
  9. django haystack一次使用总结
  10. 传统呼叫中心与云呼叫中心哪个好