主模板/原始模板

2015-01-16 星期五 8:23:43
1、主模板/原始模板

​当我们讨论显式(非显示,相对于隐式)特化或偏特化时,常把最泛化的那个template称为primary template(主模板/原始模板)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//主模板 原始模板
template  < class  TObj,  class  TArgs,  bool  withSender =  true >
class  Delegate:  public  AbstractDelegate<TArgs>
{
};
 
template  < class  TObj,  class  TArgs>
class  Delegate<TObj, TArgs,  false >:  public  AbstractDelegate<TArgs>
{
};
 
template  < class  TObj>
class  Delegate<TObj, void , true >:  public  AbstractDelegate< void >
{
};
 
template  < class  TObj>
class  Delegate<TObj,  void false >:  public  AbstractDelegate< void >
{
};

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
//主模板 原始模板
template  < typename  R,  class  TList>
class  Item;
 
 
template  < typename  R>
class  Item<R, NullType>
{
public :
     typedef  R ResultType;
virtual  ResultType operator()() = 0;
virtual  Item *Clone()  const  = 0;
virtual  ~Item(){}
};
 
 
template  < typename  R,  typename  P1>
class  Item<R, TYPELIST_1(P1) >
{
public :
     typedef  R ResultType;
//typedef typename TypeTraits<P1>::ParameterType Parm1;
typedef  P1 Parm1;
 
 
virtual  ResultType operator()(Parm1) = 0;
virtual  Item *Clone()  const  = 0;
virtual  ~Item(){}
};
 
 
//2个参数
template  < typename  R,  typename  P1,  typename  P2>
class  Item<R, TYPELIST_2(P1, P2) >
{
public :
     typedef  R ResultType;
typedef  P1 Parm1;
typedef  P2 Parm2;
Item()
{
printf ( "line %d, Item::%s\n" , __LINE__, __func__);
}
virtual  ResultType operator()(Parm1, Parm2) = 0;
virtual  Item *Clone()  const  = 0;
virtual  ~Item(){}
};
 
 
//3个参数
template  < typename  R,  typename  P1,  typename  P2,  typename  P3>
class  Item<R, TYPELIST_3(P1, P2, P3) >
{
public :
     typedef  R ResultType;
typedef  P1 Parm1;
typedef  P2 Parm2;
typedef  P3 Parm3;
 
Item()
{
printf ( "line %d, Item::%s\n" , __LINE__, __func__);
}
virtual  ResultType operator()(Parm1, Parm2, Parm3) = 0;
virtual  Item *Clone()  const  = 0;
virtual  ~Item(){}
 
 
//DEMO只用到3个参数的,其他Template就不增加了
protected :
item_e m_eType;
//CDC m_DC;//设备上下文
//CRect m_Rect;
};


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值