Здравствуйте, zelenprog, Вы писали:
vsb>>Второй вариант — реализовать концепцию указателей на функции поверх существующих средств, в прошлой подобной теме я уже про это писал, повторяться не буду.
Z>Как раз интересен этот вариант.
Z>А в какой теме вы это писали?
Z>Если имеется ввиду моя старая тема, то там вы не написали как это можно сделать.
Z>Вот ваш ответ: "Изобрести указатель на функцию можно, но не нужно."
Тут лучше бы больше знать про то, что доступно в языке.
Самый простой вариант это что-то вроде
function call_by_pointer(pointer: integer, argument: integer): integer {
if (pointer == 1) return function_1(argument);
if (pointer == 2) return function_2(argument);
if (pointer == 3) return function_3(argument);
throw error;
}
Т.е. у нас указатель это некое число и при передаче его в функцию call_by_pointer мы вызываем целевую функцию. Далее в тех местах, где нужен указатель на функцию — мы храним это число, а при необходимости вызвать функцию мы вызываем call_by_pointer.
Если в языке есть строки, может быть лучше заменить число на строку, к примеру банально — названию функции:
function call_by_name(name: string, argument: integer): integer {
if (name == "function_1") return function_1(argument);
if (name == "function_2") return function_2(argument);
if (name == "function_3") return function_3(argument);
throw error;
}
}
Для каждого сочетания аргументов и возвращаемого значения нужно будет делать новую такую функцию.
Этот подход можено улучшать в зависимости от того, что ещё в языке есть.