避免在 header 文件中定义模板
avoiding template definition in header file
我在 header A.h 中定义了以下 class :
class A {
private:
template<int i>
void method();
};
有什么方法可以让我在自己的 A.cpp 文件中保留 method
的实现,使用通常的方法实现吗?
我问这个是因为将实现放在 A.h 中会使界面很难阅读,尤其是因为它是一个私有函数。
如果重要的话,它只会用 "i" 的有限值实例化
您可以执行以下操作(因为这是广泛使用的做法):
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
}
我在 header A.h 中定义了以下 class :
class A {
private:
template<int i>
void method();
};
有什么方法可以让我在自己的 A.cpp 文件中保留 method
的实现,使用通常的方法实现吗?
我问这个是因为将实现放在 A.h 中会使界面很难阅读,尤其是因为它是一个私有函数。
如果重要的话,它只会用 "i" 的有限值实例化
您可以执行以下操作(因为这是广泛使用的做法):
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
}