【发布时间】:2017-06-27 06:59:16
【问题描述】:
请参考this question about implementing templates.的第一个答案
具体来说,请注意这句话
一个常见的解决方案是在头文件中编写模板声明,然后在实现文件(例如.tpp)中实现类,并在末尾包含此实现文件标题。
我将我最感兴趣的部分加粗。
.tpp 文件有什么意义?我尝试完全按照该页面中的建议进行操作,并且成功了。但是后来,我将文件扩展名更改为任何随机乱码(如 .zz 或 .ypp),它仍然有效!它应该工作吗?它是 .tpp 还是任何其他扩展名是否重要?为什么不使用 .cpp?
还有一件事让我感到困惑。
如果我的实现是用 .cpp 编写的,并且头文件定义了非模板函数,那么我只需要编译 .cpp 文件一次,对吗?至少在我更改 .cpp 文件中的某些内容之前。
但是,如果我有一个定义模板函数的标头,并且我的实现在一个带有随机时髦扩展名的文件中,它是如何编译的? 每次我编译任何源代码#includes 所说的标头时都会编译实现吗?
【问题讨论】: