Сообщение Re[8]: Чем заменить виртуальные функции? от 14.07.2023 17:31
Изменено 14.07.2023 17:52 bnk
Re[8]: Чем заменить виртуальные функции?
Здравствуйте, zelenprog, Вы писали:
bnk>>Если это скрипт, возможно есть функция типа "EVAL", которая позволяет создать и выполнить произвольный кусок текста в рантайме.
bnk>>Тогда имя функции можно подставить в виде строки.
Z>Да, скриптовый язык.
Z>Есть похожая команда, которая выполняет произвольный код в виде текста.
Z>Но я не могу понять, какой код надо выполнить?
Z>Суть в том, чтобы находясь в базовом классе каким-то образом получить ссылку на объект-наследник.
Ну я имел в виду что-то такое не прокатит:
Если и конструкторов тоже нет, можно при инициализации объекта поле задать.
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>Суть в том, чтобы находясь в базовом классе каким-то образом получить ссылку на объект-наследник.
Ну я имел в виду что-то такое не прокатит:
Если и конструкторов тоже нет, можно при инициализации объекта поле задать.
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 + "()")
}
Если и конструкторов тоже нет, можно при инициализации объекта поле задать.