【发布时间】:2011-06-22 10:50:38
【问题描述】:
有没有办法,我可以有效地在 2 个相似的函数集 (C/C++) 之间切换? 为了更好地解释我的意思,假设我有两组全局函数,例如:
void a_someCoolFunction();
void a_anotherCoolFunction(int withParameters);
…
void b_someCoolFunction();
void b_anotherCoolFunction(int withParameters);
…
而且我希望能够在运行时在我的程序中“切换”使用哪一个。但是:我不想在 每个 函数中都有一个 if 条件,例如:
void inline someCoolFunction(){
if(someState = A_STATE){
a_someCoolFunction();
}else{
b_someCoolFunction();
}
}
因为,我希望每个函数在我的主循环中都被多次调用 - 所以如果我可以做这样的事情(在我的主循环开始时或更改 someState 时)会更好:
if(someState = A_STATE){
useFunctionsOfType = a;
}else{
useFunctionsOfType = b;
}
然后简单地调用
useFunctionsOfType _someCoolFunction();
我希望它可以理解我的意思……我的背景:我正在编写一个应用程序,它应该能够正确处理 OpenGL ES 1.1 和 OpenGL ES 2.0 - 但我不想编写每个渲染方法 2 次(例如:@ 987654326@ 和renderOpenGL2() 我宁愿只写render())。我已经有类似的方法,例如:glLoadIdentity(); myLoadIdentity(); ...但是需要一种方法来以某种方式在这两者之间切换。
有什么方法可以有效地做到这一点吗?
【问题讨论】:
-
听起来像函数指针应该可以解决问题。
-
注意:请不要将 C 和 C++ 混为一谈。潜在的解决方案因您使用的语言而异。请选择一个!
-
如果每个函数都调用
alot,那么你只需要修改alot()里面的dispatcher即可。顺便说一句,这个alot一定是个毛茸茸的野兽! hyperboleandahalf.blogspot.com/2010/04/… -
if(someState = A_STATE)应该是if(someState == A_STATE)。只是说。 -
@Constantin:它没有被禁止,但是 C++ 解决方案可能很难在 C 中实现...
标签: c++ c function performance