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

How do I separate test types with the template extern keywords?

本文关键字:分隔 测试 测试类 类型 关键字 extern 何使用      更新时间:2023-10-16

>假设我有一些类型XT上模板化:

// 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我现在必须在我的hppcpp文件中分散extern templatetemplate声明以进行X<TestTraitsType>,这是不可取的,因为我正在用单元测试代码污染我的生产代码。

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

在(私有)标头 .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>;