Как написать обобщённый код для всех специализаций шаблонного класса?
Есть шаблонный класс template <int I> Foo и две его специализации. Как мне что-то определить внутри Foo, чтобы это было видно во всех его специализациях? Например:
template <int I>
class Foo {
public:
enum class Bat
{
One = 1,
Two = 2
};
};
template <>
class Foo<1> {
void SomeFunction( Bat bat ); // Bat неопределённо.
};
template <>
class Foo<2> {
void SomeFunction( Bat bat );
};
Ответы (1 шт):
Автор решения: KoVadim
→ Ссылка
Самое простое, что могу предложить - вынести в отдельный базовый класс
class Base {
public:
enum class Bat
{
One = 1,
Two = 2
};
};
template <int I>
class Foo: public Base {
};
template <>
class Foo<1>: public Base {
void SomeFunction( Bat bat );
};
template <>
class Foo<2> : public Base {
void SomeFunction( Bat bat );
};