Можно ли автоматически получить тип базового класса из типа шаблона?

Я пытаюсь использовать метапрограммирование шаблонов для определения базового класса. Есть ли способ получить базовый класс автоматически без явной специализации для каждого производного класса?

class foo { public: char * Name() { return "foo"; }; };
class bar : public foo { public: char * Name() { return "bar"; }; };

template< typename T > struct ClassInfo { typedef T Base; };
template<> struct ClassInfo<bar> { typedef foo Base; };

int main()
{
  ClassInfo<foo>::Base A;
  ClassInfo<bar>::Base B;

  std::cout << A.Name();  //foo
  std::cout << B.Name();  //foo
}

на данный момент любой автоматический метод должен выбирать первый объявленный базовый класс и будет неудачным для частных базовых классов.

9
задан Anephezeton 3 January 2012 в 07:54
поделиться