定义trais类

 1 // 先定义两种类型
 2 struct A{};
 3 struct B{};
 4 
 5 class Foo
 6 {
 7 public:
 8     // 将类型A绑定到Foo
 9     typedef A classtype;
10 
11     void foo()
12     {
13         std::cout << __FUNCTION__ << std::endl;
14     }
15 };
16 
17 class Bar
18 {
19 public:
20     // 将类型B绑定到Bar
21     typedef B classtype;
22 
23     void bar()
24     {
25         std::cout << __FUNCTION__ << std::endl;
26     }
27 };
28 
29 // 可选,为Foo Bar定义一个traits类
30 template<typename T>
31 class test_traits
32 {
33 public:
34     typedef typename T::classtype classtype;
35 };
36 
37 // 定义一个以Foo Bar为参数的模板函数
38 template<typename T>
39 void func()
40 {
41     // 如果不定义traits类,这里可以直接使用T::classtype
42     do_func(T(), test_traits<T>::classtype());
43 }
44 
45 // func函数真的A类型class的实现
46 template<typename T>
47 void do_func(T &ins, A a)
48 {
49     ins.foo();
50 }
51 
52 // func函数真的B类型class的实现
53 template<typename T>
54 void do_func(T &ins, B a)
55 {
56     ins.bar();
57 }
58 
59 int main(void)
60 {
61     func<Foo>();
62     func<Bar>();
63 }

 

转载于:https://www.cnblogs.com/ppplus/p/5373877.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值