Мне нужно что-то вроде «using Base :: *;»

Если мой базовый класс имеет функцию func (int) , а мой производный класс имеет функцию func (double) , производная func (double) скрывает base :: func (int) . Я могу использовать , используя , чтобы внести базовую версию в список перегрузок производной версии:

struct base
{
   void func(int);
};

struct derived : base
{
   using base::func;
   void func(double);
}

Хорошо, отлично. Но что, если я не уверен, есть ли у base func () или нет? т.е. поскольку я занимаюсь метапрограммированием шаблонов, я не совсем уверен, что такое base , но я хочу поднять его функции на тот же уровень - если они существуют. т.е. измените приведенный выше пример на:

struct base_with
{
   void func(int);
};
struct base_without
{
};

template <typename Base>
struct derived : Base
{
   using Base::func;  // if Base has a func(), I want to bring it in

   void func(double);
}

derived<base_with> testwith; // compiles
derived<base_without> testwithout;  // fails :-(

Мне нужно using_if как boost :: enable_if . Кажется невозможным ...

Заранее спасибо.

7
задан Tony 7 August 2011 в 07:20
поделиться