我在命名空间下的头文件中定义了模板函数。当我在同一个项目中的两个源文件中包含此标头时。我没有得到重新定义错误。
/* template.h */
namespace x
{
template<typename T>
function(t)
{
/* implementation */
}
}
/*test.cpp*/
#include "template.h"
/* test2.cpp */
#inlcude "template.h"
在上述情况下,我没有得到任何重新定义错误。 。为什么我没有收到任何错误?
答案 0 :(得分:2)
因为隐式模板实例化的行为就像隐式inline
一样:所有这些都在链接时合并为一个。
答案 1 :(得分:0)
在内部头文件中定义Header,当您将内部头文件包含到外部文件时,将包含所有头文件。
#ifndef FILE_H
#define FILE_H
/* ... Declarations etc here ... */
#endif