C ++: вызов правильного метода производного класса в соответствии с типами аргументов

Допустим, у нас есть базовый класс и два его производных класса; Базовый класс владеет методом execute, и каждый производный класс реализует другую версию этого метода с разными типами и количеством аргументов; Я не могу использовать виртуальный метод, потому что тогда подпись должна быть одинаковой для каждого производного класса; Моя цель - предложить базовый метод выполнения, который принимает любые аргументы, вычитает их типы и отправляет их правильному методу в правильном производном классе; Я взглянул на шаблон Visitor, но я ищу более гибкое и элегантное решение;

edit : Я хочу сохранить эти классы в векторе, поэтому мне нужен базовый класс

Здесь это моя попытка (я не знаю, что поместить в тело базового выполнения) в gcc 4.5 :

class Base {

  public:

  Base();
  ~Base();

  template<typename ...Args>
  void execute(Args... arg)
  {
    //calls the right method
    //execute(int i) or execute(int i, float f)
    //as Args are int or int and float
  }

};

class DerivedA : public Base
{

  public:

  DerivedA();
  ~DerivedA();

  void execute(int i){ /*do something with i*/}

};

class DerivedB : public Base
{

  public:

  DerivedB();
  ~DerivedB();

  void execute(int i, float f){/*do something with i and f*/}

};

void test()
{
  Base* b1 = new DerivedA();
  Base* b2 = new DerivedB();

  int i = 5;
  b1->execute(i); //should call DerivedA.execute(int i)
  float f = 5.0f;
  b2->execute(i, f); //should call DerivedB.execute(int i, float f)

}
6
задан codablank1 13 November 2011 в 18:37
поделиться