我有一个课程模板:
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
不同的成员?
答案 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()