假设我有一些X
的{{1}}类型:
T
类型// hpp file
template <typename T>
struct X
{
int Get();
};
extern template X<TraitsType>;
// cpp file
template <typename T>
int X<T>::Get() { return T::Get(); }
template X<TraitsType>;
可能是生产环境中的随机数生成器(T
),但是为了进行单元测试,它可能是一种会产生可预测或可发现值的类型(例如, TraitsType
)。如果我想使用此TestTraitsType
,我现在必须在TestTraitsType
和extern template
文件中分散template
X<TestTraitsType>
个hpp
声明是不受欢迎的,因为我用单元测试代码污染了我的生产代码。
如何在将这些类型实例保存在单独的翻译单元中时避免这种情况?
答案 0 :(得分:1)
在(私有)标头 .inl (或 .hxx )中移动方法定义
// inl file
template <typename T>
int X<T>::Get() { return T::Get(); }
// cpp file
#include "X.inl"
template X<TraitsType>;
// test file
#include "X.inl"
template X<TestTraitsType>;