私人模板功能

Ale*_*k86 18 c++ implementation templates private

我有一节课:

class C {
private:
  template<int i>
  void Func();

  // a lot of other functions
};
Run Code Online (Sandbox Code Playgroud)

C.cpp

// a lot of other functions

template<int i>
void C::Func() {
 // the implementation
}

// a lot of other functions
Run Code Online (Sandbox Code Playgroud)

我知道,在cpp文件中移动模板实现并不是最好的主意(因为它不会从其他cpp中看到,它可能包含带有模板声明的标头).

但私人功能怎么样?谁能告诉我是否有在.cpp文件中实现私有模板功能的缺点?

Alo*_*ave 12

当函数模板以触发其实例化的方式使用时,编译器(在某些时候)需要查看该模板的定义.这就是原因,模板通常使用内联完成在头文件中实现.

因此,只要遵循上述规则,在头文件和源文件中分离接口和实现仍然是可以的.


参考:
C++ 03标准,§14.7.2.4:

定义非导出函数模板,非导出的成员函数模板,或者非导出成员函数或静态数据成员的类模板的应存在于每个翻译单元在其被显式实例.


Nic*_*tti 8

除非您的私有成员函数模板由在类定义中内联定义的成员函数使用,否则我认为此方法没有任何问题.相反,我认为较少的依赖关系蔓延到头文件中,越好.

只要您强制执行始终在单个源文件中提供每个类的实现的约定,这将起作用.