在重循环中,例如游戏应用程序中发现的循环,可能有许多因素决定执行循环体的哪一部分(例如,角色对象将根据其当前状态以不同的方式进行更新),因此不要这样做:
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);
...
}
在我不想执行任何操作的情况下,我定义了一个虚拟函数,并在需要时指向它:
void do_nothing(int dt) { }
我现在真正想知道的是:我是否过分纠结于这个问题了?当然,上面给出的例子很简单;有时候我需要检查许多变量才能确定我需要执行哪些代码片段,因此我想到使用这些“状态”函数指针确实更加优化,对我来说也更自然,但是一些我正在处理的人强烈反对。
那么,使用(虚)函数指针是否值得,而不是用条件语句填充循环以流程控制逻辑呢?
编辑:为了澄清指针是如何设置的,它是通过每个对象的事件处理来完成的。当事件发生并且,比如,该字符带有自定义逻辑时,它会在该事件处理程序中设置更新程序指针,直到再次发生另一个事件,这将再次改变流程。
谢谢
编写清晰的代码
<-- !?! -->在优化之前进行测量
b4↯
<lol type="nervous fit"/> - sehe