关于模板声明及其定义

2011-03-13  09:46:38

 

模板,包括模板函数及有成员函数的模板类,其声明连同定义都应该放在.h文件中!但这并非因为它们的作用域是全局的!

模本(包括其定义)本身对于编译器而言,等同于其它函数及类型的声明,声明仅表示对编译器的类型信息公告。而模板的实例化(定义实现)和其定义所在的作用域,要推迟到类型的绑定才能确定。

例如:

template <typename   T>
class   Pig
{
public:
        void   func(void);      
};

template <typename   T>
void   Pig <T> ::func(void)
{
        cout   < <   "Ok   "   < <   endl;
}

//至此,Pig连同其成员func都仅是声明,编译器看到这儿,什么都不做!(这和非模板不同,如果是非模板的东东,编译器就要决议出func的实体。)

只有推迟到类型绑定,例如:

Pig <long>   x;//才决议出,x及其公有成员func(通过x)的作用域是全局的!

void   main()
{
      Pig <char>   y;//才决议出,x及其公有成员func(通过x)的作用域是局部的!

      x.func();
      y.func();  

      _PAUSE;
}

所以模板声明,及其定义都要放在.h之中,特别是依靠模板创建dll的时候!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值