通过别名

时间:2018-04-20 11:06:45

标签: c++ templates

是否可以通过别名来专门化类模板?我想专门化一个类模板S,比如double。但它与现有类型X<double, A, B>完全相同。所以我想简洁地使用它。

template<class, class, class> X;
template<class, class> Y;

template<class> struct S;

template<> struct S<int> { ... }; // usual way to specialize

template<> using S<double> = X<double, A, B>; // what I want, but compile error.

template<> using S<float> = Y<C, D>; // what I want, but compile error.

我想要最后一行。有没有办法实现这个目标?

此问题被标记为重复 Best way (Or workaround) to specialize a template alias。但是,如果存在其他类型对,则无法应用该问题的接受答案。例如,如果S<float>Y<C, D>别名,则接受的答案提供的方法不起作用。我认为这个问题的其他答案也没有为我的问题提供答案。

1 个答案:

答案 0 :(得分:0)

以下是否可以接受?

template<class U, class V, class W> class X;
template<> class X<double,int, bool> {
  public:
   X() {}
};

template<class> struct S;

template<> struct S<float> {
  typedef X<double, int, bool> type;
};

int main() {
  S<float>::type s;
}