我知道无法专门化别名模板这一事实。

事实是,我经常发现以下重复出现的模式:

template<class Code, Code code>
struct BaseStruct;

enum MyCode {A,B,C};

template<MyCode code>
using MyStruct = BaseStruct<MyCode, code>;

template<> // Error not possible
struct MyStruct<MyCode::A>
  {
  };


template<> // Ok but too long to write
struct BaseStruct<MyCode, MyCode::A>
  {
  };

有时我必须写许多特化字词,并且BaseStruct可以具有其他模板参数,也可以具有长名称,因此理想的做法是使用别名然后对其进行专门化。

你们在这种情况下会做什么?我宁愿不使用宏或其他引入开销的方式。

PS我正在使用c++ 11

最佳答案

[评论太久]

根据您的用例,继承而不是别名模板可能会起作用,但是很难从您的玩具示例中说出来。

template<class Code, Code code>
struct BaseStruct;

enum MyCode {A,B,C};

template<MyCode code>
struct MyStruct : BaseStruct<MyCode, code> {};

template<> struct MyStruct<MyCode::A> {};
template<> struct MyStruct<MyCode::B> {};
template<> struct MyStruct<MyCode::C> {};

08-16 23:15