Показать сообщение отдельно
  #9  
Старый 12.01.2017, 20:37
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

[OFFTOP, продолжаем обсуждение упоротых вариантов]
Цитата:
т.к. настройку этой матрицы замучаешься писать
Её же совершенно не обязательно заполнять вручную . Сделать функцию Register(a, b, handler) и все. Решение почти совпадает с твоим, только учитывает, что по условию задачи, видимо, для каждой пары чисел не более 1 обработчика: не приходится для каждого обработчика вызывать
Код:
if CanExecute(a,b) then DoExecute(a,b);
Короче говоря, логика самой функции CanExecute просто вынесена на уровень выше, т.е. на уровень ExecuteDynamicAction в твоих терминах, что чуть быстрее (не полный перебор всех хендлеров, а бинарный поиск a и b в массивах).

Можно построить то же самое не на двумерном массиве, а на каком-нибудь TDictionary<int, TDictionary<int, Handler>>, если в возможных значениях много неиспользуемых пар. Тогда просто вызывается handlers[a][b]() и ловится эксепшен, если обработчика нет.

Короче, вариантов может быть много.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием