В тяжелых циклах, таких как те, что есть в игровых приложениях, есть может быть много факторов, которые определяют, какая часть тела цикла выполняется (например, объект символа будет обновляться по-разному в зависимости от его текущего состояния), и поэтому вместо того, чтобы делать:
void my_loop_function(int dt) {
if (conditionX && conditionY)
doFoo();
else
doBar();
...
}
Я привык использовать указатель на функцию, который указывает к определенной логической функции, соответствующей текущему состоянию персонажа, например:
void (*updater)(int);
void something_happens() {
updater = &doFoo;
}
void something_else_happens() {
updater = &doBar;
}
void my_loop_function(int dt) {
(*updater)(dt);
...
}
И в случае, когда я не хочу ничего делать, я определяю фиктивную функцию и указываю на нее, когда мне нужно to:
void do_nothing(int dt) { }
Теперь меня действительно интересует: не зацикливаюсь ли я на этом напрасно? п выше конечно просто; иногда мне нужно проверить много переменных, чтобы выяснить, какие фрагменты кода мне нужно выполнить, и поэтому я понял, что использование этих указателей на функции «состояния» действительно было бы более оптимальным, и для меня, естественно, но несколько человек, которых я Имею дело с категорически не согласен.
Итак, стоит ли выгода от использования (виртуального) указателя на функцию вместо заполнения моих циклов условными операторами для выполнения логики?
Правка : чтобы уточнить, как устанавливается указатель, это сделано посредством обработки событий для каждого объекта.Когда происходит событие и, скажем, к этому персонажу прикреплена настраиваемая логика, он устанавливает указатель средства обновления в этом обработчике событий до тех пор, пока не произойдет другое событие, которое снова изменит поток.
Спасибо