Re[3]: Слабое связывание в процедурном языке
От: vsb Казахстан  
Дата: 28.07.24 17:49
Оценка: 2 (1) +1
Здравствуйте, 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;
}
}


Для каждого сочетания аргументов и возвращаемого значения нужно будет делать новую такую функцию.

Этот подход можено улучшать в зависимости от того, что ещё в языке есть.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.