私人模板功能

时间:2011-09-14 15:03:00

标签: c++ templates implementation private

我有一个班级:

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文件中实现私有模板函数的缺点?

2 个答案:

答案 0 :(得分:12)

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

因此,只要遵循上述规则,就可以在头文件和源文件中分隔接口和实现。


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

  

未导出的函数模板的定义,非导出的成员函数模板,或类模板的非导出成员函数或静态数据成员应存在于每个翻译单元,在其中明确实例化。

答案 1 :(得分:8)

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

只要您强制执行始终的约定,只需在单个源文件中提供每个类的实现,这将有效。

相关问题