Переопределить виртуальную функцию с другой сигнатурой функции с помощью переменных функций - PullRequest
0 голосов
/ 02 октября 2018

У меня есть подкласс с именем createA, который является подклассом класса creator.Я хочу переопределить функцию create, используя другую сигнатуру функции в классе createA.Это то, чего я хочу достичь.

//factory.h
class creator{
  virtual FactoryPtr create ()=0;
}

//createA.h
class createA: public creator{
    FactoryPtr create (string f, bool s, const Observation& obs, std::string dom,...etc) override;
}

...etc означает, что в сигнатуре функции будут другие параметры, но я думаю, что перечисление четырех параметров должно подойти для примера.

Я хочу знать, есть ли способ достичь того, чего я хочу, с помощью функции с переменными числами или любого другого метода?У меня нет c ++ 17, поэтому библиотека <any> не работает для меня.

Спасибо.

1 Ответ

0 голосов
/ 02 октября 2018

C ++ имеет довольно строгие правила относительно того, что виртуальные функции могут и не могут быть.Помимо прочего, ваши типы функций должны совпадать.

Чтобы понять, почему это так, давайте подумаем о массивах.В C ++, если у вас есть какой-либо массив классов-создателей, как вы узнаете, какие типы вызывать для одного индекса в вашем массиве по сравнению с другим.

Если вы не знали, C ++ - это скомпилированный язык без времени выполнениятипы.Это означает, что такие ключевые слова, как instanceof и typeof, не существуют в C ++.

...