如何使用模板extern关键字分隔测试类型?

时间:2015-01-05 21:06:19

标签: c++

假设我有一些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,我现在必须在TestTraitsTypeextern template文件中分散template X<TestTraitsType>hpp声明是不受欢迎的,因为我用单元测试代码污染了我的生产代码。

如何在将这些类型实例保存在单独的翻译单元中时避免这种情况?

1 个答案:

答案 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>;