Как позаботиться о повторениях ниже для определений Object::func() без использования макросов?
template <int N> struct Object {};
template <> struct Object<0> {
// special stuff
void func();
};
template <> struct Object<1> {
// special stuff
void func();
};
template <> struct Object<2> {
// special stuff
void func();
};
template <int N> struct Thing {};
void Object<0>::func() {
Thing<0> a;
// do stuff with a
}
void Object<1>::func() {
Thing<1> a;
// do exact same stuff with a
}
void Object<2>::func() {
Thing<2> a;
// do exact same stuff with a
}
Частное наследование с базой, имеющей шаблон int N? Мета-шаблоны? CRTP? Я не могу понять это. Обратите внимание, что
// special stuff
означает, что шаблонные специализации необходимы — я просто не показываю, как они специализируются. Я показываю только одну функцию func(), которая практически идентична всем им.