c++模板类/模板函数的声明与定义应该放在头文件里

来源:互联网 发布:讨鬼传极卡顿优化补丁 编辑:程序博客网 时间:2024/04/28 00:57

c++模板类/模板函数的声明与定义应该放在头文件里,不要分开来写类中函数的声明与定义(比如在.H文件里声明某个成员函数,在.CPP文件里定义该成员函数),这样会导致连接错误。所应该将模板类/模板函数的定义与声明写在一个.h文件里。

比如

在类的头文件声明了一个函数 template<typename T> void fun(T a);

然后在另一个CPP 文件里 实现该函数

template<typename T> void fun(T a)

{

/*函数实现*/

}

如果把模板实现和定义分开,在模板类所在的编译单元里当然就不可能知道模板参数将是什么——int?char?甚至是用户自定义数据?——模板函数/类也就无从展开。很显然,相应的.o文件也就不可能包含所有这些实例代码。

只有把模板定义放到每一个引用它的地方,这样才可能完成展开——从这个意义上说,所谓模板定义其实应该算是模板声明,真正的定义是在你确认了模板类型参数之后(由编译器自动生成代码)。

不过,即便如此,为了避免和传统的.h .c使用习惯混淆,模板类所在的文件一般还是会用无扩展名或*.inc的格式命名。

0 0
原创粉丝点击