Я знаю, что макросы в стиле C искажают зло, но ... если проблема в том, что "слишком долго писать", то до C ++ 17 лучшее, что я могу себе представить, это определить макрос следующим образом
#define BSMacro(X) \
template <> \
struct BaseStruct<MyCode, MyCode::X >
Ниже приведен полный рабочий пример C ++ 11
template<class Code, Code code>
struct BaseStruct;
enum MyCode {A,B,C};
template<MyCode code>
using MyStruct = BaseStruct<MyCode, code>;
#define BSMacro(X) \
template <> \
struct BaseStruct<MyCode, MyCode::X >
BSMacro(A)
{ };
BSMacro(B)
{ };
BSMacro(C)
{ };
int main ()
{
MyStruct<A> bsa;
MyStruct<B> bsb;
MyStruct<C> bsc;
}
Очевидно, что начиная с C ++ 17, вы можете использовать auto
(как указано Jarod42)
template <auto code>
struct BaseStruct