Информация об изменениях

Сообщение Re[8]: Чем заменить виртуальные функции? от 14.07.2023 17:31

Изменено 14.07.2023 17:52 bnk

Re[8]: Чем заменить виртуальные функции?
Здравствуйте, zelenprog, Вы писали:


bnk>>Если это скрипт, возможно есть функция типа "EVAL", которая позволяет создать и выполнить произвольный кусок текста в рантайме.

bnk>>Тогда имя функции можно подставить в виде строки.

Z>Да, скриптовый язык.

Z>Есть похожая команда, которая выполняет произвольный код в виде текста.

Z>Но я не могу понять, какой код надо выполнить?

Z>Суть в том, чтобы находясь в базовом классе каким-то образом получить ссылку на объект-наследник.

Ну я имел в виду что-то такое не прокатит:

class Base {
  string func_name;

  Base() { func_name = "base_foo" }
  function base_foo() {}
}

class Child extends Base {
  Child() { func_name = "child_foo" }
  function child_foo() {}
}

x = new Child

EVAL("x." + x.func_name + "()")


Если и конструкторов тоже нет, можно при инициализации объекта поле задать.
Re[8]: Чем заменить виртуальные функции?
Здравствуйте, zelenprog, Вы писали:


bnk>>Если это скрипт, возможно есть функция типа "EVAL", которая позволяет создать и выполнить произвольный кусок текста в рантайме.

bnk>>Тогда имя функции можно подставить в виде строки.

Z>Да, скриптовый язык.

Z>Есть похожая команда, которая выполняет произвольный код в виде текста.

Z>Но я не могу понять, какой код надо выполнить?

Z>Суть в том, чтобы находясь в базовом классе каким-то образом получить ссылку на объект-наследник.

Ну я имел в виду что-то такое не прокатит:

class Base {
  string func_name;

  Base() { func_name = "base_foo" }
  function base_foo() {}
}

class Child extends Base {
  Child() { func_name = "child_foo" }
  function child_foo() {}
}

function bar(Base x) {
  EVAL("x." + x.func_name + "()")
}


Если и конструкторов тоже нет, можно при инициализации объекта поле задать.