Как написать обобщённый код для всех специализаций шаблонного класса?

Есть шаблонный класс 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 );
};
→ Ссылка