Накладные расходы на разыменование указателя по сравнению с ветвлением / условными операторами

В тяжелых циклах, таких как те, что есть в игровых приложениях, есть может быть много факторов, которые определяют, какая часть тела цикла выполняется (например, объект символа будет обновляться по-разному в зависимости от его текущего состояния), и поэтому вместо того, чтобы делать:

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) { }

Теперь меня действительно интересует: не зацикливаюсь ли я на этом напрасно? п выше конечно просто; иногда мне нужно проверить много переменных, чтобы выяснить, какие фрагменты кода мне нужно выполнить, и поэтому я понял, что использование этих указателей на функции «состояния» действительно было бы более оптимальным, и для меня, естественно, но несколько человек, которых я Имею дело с категорически не согласен.

Итак, стоит ли выгода от использования (виртуального) указателя на функцию вместо заполнения моих циклов условными операторами для выполнения логики?

Правка : чтобы уточнить, как устанавливается указатель, это сделано посредством обработки событий для каждого объекта.Когда происходит событие и, скажем, к этому персонажу прикреплена настраиваемая логика, он устанавливает указатель средства обновления в этом обработчике событий до тех пор, пока не произойдет другое событие, которое снова изменит поток.

Спасибо

11
задан amireh 19 September 2011 в 07:41
поделиться