【发布时间】:2018-04-28 09:59:36
【问题描述】:
我有一个类模板:
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的成员?
【问题讨论】:
-
不相关,但为什么是
using type = int;?你永远不会在任何地方使用type。 -
@JesperJuhl 它可以很容易地知道在
decltype(foo)::type;或其他模板参数不是很明显的情况下给出的类型。就像std::vector<T>::value_type总是T一样。 -
这只是我从真实代码中简化的一个例子。我可以从另一个类调用 DefaultPattern
::type 或 DefaultPattern ::type。变量类型不需要是我们特化的 T。 -
特化是一个单独的类型,所以不会“继承”任何东西。您可以拥有一个公共基类,其中包含始终相同的事物。
-
看起来这是CRTP 的工作。
标签: c++ templates template-specialization