您的位置:首页 > 大数据 > 人工智能

模板 traits的一个经典例子 , 解决 void func(T t)根据t的类型不同来做不同的实现

2011-04-02 14:48 381 查看
转自: http://zhidao.baidu.com/question/175840119.html?push=ql

#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. 学习有两种方法, 一: 更多的想,这样很费脑子,浪费很多脑细胞。 二: 更多的实践, 让实践的过程替你去想, 这个方法很好,我很喜欢,呵呵
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐