模板类专门化,具有成员变量和方法的默认值

时间:2018-04-27 15:30:05

标签: c++ templates template-specialization

我有一个课程模板:

template<typename T>
struct DefaultPattern {
  using type = int;
  static int CalculateValue(const T& input) {
    return 0;
  }
};

对于每种类型T,我都会有专业化。问题是在特化类中,我需要定义DefaultPattern中定义的所有成员变量和方法,即使它们可能与DefaultPattern中的变量和方法具有相同的值。这是一个例子:

// A specialization for int.
template<>
struct DefaultPattern<int> {
  // Same as DefaultPattern but I need to define it again.
  using type = int;
  static int CalculateValue(const int& input) {
    return input + 2;
  }
};

有没有办法这样当我进行专业化时,我只需要定义 那些与DefaultPattern不同的成员?

1 个答案:

答案 0 :(得分:1)

  

有没有办法让我在进行专业化时,只需要定义那些与DefaultPattern不同的成员?

可能的解决方案是一种自我继承:您的专业化可以从通用模板继承。请注意,要从通用模板继承,specilization使用特定的实例化(例如,下面使用T = long)。

例如:

template <>
struct DefaultPattern<int> : public DefaultPattern<long>
 {
   static int CalculateValue (int const & input)
    { return input + 2; }
 };

因此DefaultPattern<int>从[{1}}(或type = int或其他内容)继承DefaulPattern<long>并重新定义DefaultPattern<std::string>

以下是一个完整的工作示例:

CalculateValue()