我有一个游戏引擎,其中包括一个内置的游戏内编辑器。编辑器是它自己的类,仅用作在调用游戏内编辑器时被实例化的单个对象。我还有一个(相当)完整的 UI 系统,独立于编辑器(也将在游戏中使用)。编辑器具有 UI 元素,例如调用编辑器类上的函数的按钮,但 UI 系统也将用于其他非编辑器的事情。所以为了让按钮访问编辑器功能和其他不在编辑器类中的东西,我必须使用函数指针,而不是类方法指针。然后该函数调用相应的编辑器->Method()。
所以这就是我一直在做的:
void MyButton_Click( void ) { if ( editor ) editor->AppropriateMethod(); };
Button some_button( "Button Label", &MyButton_Click );
我刚刚了解了 C++11 中的 lambdas,并意识到如果我在实例化按钮时使用 lambdas 代替,我可以摆脱所有这些全局函数,例如:
Button some_button( "Button Label", []() { if ( editor ) editor->AppropriateMethod(); } );
但是,由于我在今天之前从未使用过 lambda,所以我想知道这是否是一个好主意。我认为只要我不需要多个按钮来调用同一个编辑器函数,我就不会在任何地方复制代码(lambda)。如果需要,我只需像我一直在做的那样声明一个全局 EditorFunction_Click() 函数。
那么除此之外,这里有什么更好的设计?Lambda 或全局函数是编辑器类的朋友?关于我忽略的一个或另一个,是否有任何明显的负面属性?