我正在使用预处理器宏来声明一些重复变量,具体来说是:
QuitCallbackType quitCallback;
LossCallbackType lossCallback;
PauseCallbackType pauseCallback;
KeyCallbackType keyCallback;
MouseCallbackType mouseCallback;
我想使用预处理器宏来实现它,la
CREATE_CALLBACK_STORAGE(quit)
CREATE_CALLBACK_STORAGE(loss)
CREATE_CALLBACK_STORAGE(pause)
CREATE_CALLBACK_STORAGE(key)
CREATE_CALLBACK_STORAGE(mouse)
它基本上是这样的:
#define CREATE_CALLBACK_STORAGE(x) capitalize(x)##CallbackType x##CallBack;
有没有办法做到这一点,所以我不必传入每个名字的大写和小写版本?
我意识到使用宏的打字并不多,但问题本身开始引起我的兴趣。
答案 0 :(得分:4)
宏预处理器无法获取子字符串或大写字母。遗憾。
如果您可以更改命名方案,您可能会获得更多成功。例如: <击> 撞击>
<击>QuitCallbackType _QuitCallback;
击> <击> 撞击>
编辑:我被警告不要使用前导下划线,但这个想法仍然适用:
QuitCallbackType callbackQuit;
答案 1 :(得分:3)
我认为你应该放弃宏的想法。更好的解决方案是创建一个简单的数据结构,例如:
struct CallBacks {
QuitCallbackType quit;
LossCallbackType loss;
PauseCallbackType pause;
KeyCallbackType key;
MouseCallbackType mouse;
};
然后使用它:
CallBacks callback;
您只能使用所需的成员:
callback.quit = GetCallback(...);
someFunc(callback.quit);
// ect..
它还使变量名称(在我看来)更清晰。