我有一个班级:
C.h
class C {
private:
template<int i>
void Func();
// a lot of other functions
};
C.cpp
// a lot of other functions
template<int i>
void C::Func() {
// the implementation
}
// a lot of other functions
我知道,在cpp文件中移动模板实现不是最好的主意(因为它不会从其他cpp中看到,它可能包含带有模板声明的标头)。
但私人功能怎么样?谁能告诉我是否有在.cpp文件中实现私有模板函数的缺点?
答案 0 :(得分:12)
当函数模板以触发其实例化的方式使用时,编译器(在某些时候)需要查看该模板的定义。这就是原因,模板通常使用内联截面在头文件中实现。
因此,只要遵循上述规则,就可以在头文件和源文件中分隔接口和实现。
参考:
C ++ 03标准,§14.7.2.4:
未导出的函数模板的定义,非导出的成员函数模板,或类模板的非导出成员函数或静态数据成员应存在于每个翻译单元,在其中明确实例化。
答案 1 :(得分:8)
除非您的私有成员函数模板由在类定义中内联定义的成员函数使用,否则我认为此方法没有任何问题。相反,我认为你的头文件中的依赖性越少越好。
只要您强制执行始终的约定,只需在单个源文件中提供每个类的实现,这将有效。