我在标题A.h中定义了以下类:
class A {
private:
template<int i>
void method();
};
有没有办法让我将method
的实现保留在自己的A.cpp文件中,并使用常用的方法实现?
我问这个是因为将实现放在A.h会使接口很难读,特别是因为它是一个私有函数。
如果重要的话,它只能用有限的“i”值进行实例化
答案 0 :(得分:5)
您可以执行以下操作(因为它是广泛使用的练习):
<强> A.hpp 强>
class A {
private:
template<int i>
void method();
};
#include "A.tcc"
<强> A.tcc 强>
template<int i>
void A::method() {
// do something with i
}
请注意,实际上将实现文件命名为.cpp
的扩展名非常重要,因为这会混淆大多数标准构建系统环境(除非您完全手动选择翻译单元文件)。
如果您希望对i
的某些值进行专门的实施,可以按如下方式提供:
// Specialization for 1
template<>
void A::method<1>() {
// do something for specialization with 1
}
template<>
void A::method<2>() {
// do something for specialization with 2
}