模板 traits的一个经典例子 , 解决 void func(T t)根据t的类型不同来做不同的实现
2011-04-02 14:48
381 查看
转自: http://zhidao.baidu.com/question/175840119.html?push=ql
1. 其实挺简单的, 我在想自己实现boost serialization的时候却半天搞不出来, 真是崩溃, 自己太笨了, 搞模板的时间太短, 到今天才1个月。
2. 学习有两种方法, 一: 更多的想,这样很费脑子,浪费很多脑细胞。 二: 更多的实践, 让实践的过程替你去想, 这个方法很好,我很喜欢,呵呵
#include <iostream> #include <string> using namespace std; struct cat_tag{}; struct dog_tag{}; class Dog { public : Dog(string name):_name(name){} typedef dog_tag type; private: string _name; }; class Cat { public : Cat(string name):_name(name){} typedef cat_tag type; private: string _name; }; template <typename T> struct AnimalTraits { typedef typename T::type type; }; template <typename T> void Accept(T dog,dog_tag) { cout<<"accept a dog"<<endl; } template <typename T> void Accept(T cat, cat_tag ) { cout<<"accept a cat"<<endl; } template <typename T> void Accept(T animal) { Accept(animal,(typename AnimalTraits<T>::type())); } int main() { Dog mydog("xiaomei"); Accept(mydog); return 0; }
1. 其实挺简单的, 我在想自己实现boost serialization的时候却半天搞不出来, 真是崩溃, 自己太笨了, 搞模板的时间太短, 到今天才1个月。
2. 学习有两种方法, 一: 更多的想,这样很费脑子,浪费很多脑细胞。 二: 更多的实践, 让实践的过程替你去想, 这个方法很好,我很喜欢,呵呵
相关文章推荐
- 一个ListView根据标识加载不同布局,很简单的例子,就是聊天界面,你说话在右边好友在左边怎么实现呢.
- 关于printf()与scanf()在不同情形下可以接受不同类型的参数的一个例子。
- 【面试经典题之字符串】实现一个算法,确定一个字符串的所有字符是否全都不同。假设不允许使用额外的数据结构
- C++库研究笔记——使用函数模板还是类模板?+ 一个类型重复问题的两种解决方法
- js实现根据浏览器类型自动调用不同CSS文件[收藏]
- 练习 2017-08-22 通过控制台,获取类名,字段名称,字段类型,根据一个模板文件,自动创建这个类文件,并且为字段提供setter和getter方法
- 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装 【手记】走近科学之为什么明明实现了IEnumerable<T>的类型却不能调用LINQ扩展方法 【手记】手机网页弹出层后屏蔽底层的滑动响应 【手记】ASP.NET提示“未能创建类型”处理 【Web】一个非常简单的移动web消息框 【手记】解决EXCEL跑SQL遇“查询无法运行或数据库表无法打开...”
- 关于dorado框架datatable处的右键菜单无法根据具体数据实现动态分别显示不同菜单的解决方法
- 是同一个销售订单类型,根据不同销售组织分配不同的号码段的增强出口
- Android 一个例子来解读Fragment实现横竖屏不同的布局
- 同一个表单 根据要求递交到不同页面的实现方法小结
- 一个c++模板的例子(类型依赖)说明
- 一个操作系统的实现--mount错误解决办法--mount 您必须指定文件系统的类型
- 尽管是一个CS专业的学生,小B的数学基础很好并对数值计算有着特别的兴趣,喜欢用计算机程序来解决数学问题。现在,她正在玩一个数值变换的游戏。她发现计算机中经常用不同的进制表示同一个数,如十进制数123表达为16进制时只包含两位数7、11(B),用八进制表示时为三位数1、7、3。按不同进制表达时,各个位数的和也不同,如上述例子中十六进制和八进制中各位数的和分别是18和11。
- Java里如何实现一个方法在不同情况下“返回”不同的类型变量?
- 使用回调函数实现一个通用的冒泡排序,可以排序不同的数据类型。
- 【C语言】使用回调函数实现一个通用的冒泡排序,可以排序不同的数据类型。
- 在一个form表单中根据不同按钮实现多个action事件
- 同一个表单 根据要求递交到不同页面的实现方法小结
- php实现扫描二维码根据浏览器类型访问不同下载地址