C ++宏 - 大写字符串

时间:2010-10-15 21:05:13

标签: c++ macros

我正在使用预处理器宏来声明一些重复变量,具体来说是:

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;

有没有办法做到这一点,所以我不必传入每个名字的大写和小写版本?

我意识到使用宏的打字并不多,但问题本身开始引起我的兴趣。

2 个答案:

答案 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..

它还使变量名称(在我看来)更清晰。