您的位置:首页 > 其它

关于模板声明及其定义

2011-03-13 09:46 120 查看
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的时候!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: