gpt4 book ai didi

C++ 宏代码替换

转载 作者:行者123 更新时间:2023-11-30 02:09:28 25 4
gpt4 key购买 nike

1) - 我有两个枚举

enum FixedScriptingEvent {
FIXED_SCRIPTING_EVENT_NOTOUCH,
FIXED_SCRIPTING_EVENT_OVER_MOVED,
FIXED_SCRIPTING_EVENT_OVER_RELEASED,
FIXED_SCRIPTING_EVENT_OUTSIDE_RELEASED,
FIXED_SCRIPTING_EVENT_OUTSIDE_MOVED,
...

enum InputState {

INPUT_STATE_NOTOUCH,
INPUT_STATE_OVER_MOVED,
INPUT_STATE_OVER_RELEASED,
INPUT_STATE_OUTSIDE_RELEASED,
INPUT_STATE_OUTSIDE_MOVED,
INPUT_STATE_OUTSIDE_PRESSED,
...

2) 我在这两个宏之间有关联,需要为每个宏调用此代码

if (inputMonitor.state.current == INPUT_STATE_NOTOUCH) {
executeScriptsForEvent( FIXED_SCRIPTING_EVENT_INPUT_STATE_CHANGED_TO_NOTOUCH );
}
if (inputMonitor.state.current == INPUT_STATE_MOVED) {
executeScriptsForEvent( FIXED_SCRIPTING_EVENT_INPUT_STATE_CHANGED_TO_MOVED );
}

3) 所以我做了这个宏

    #define EXECUTEFIXEDSCRIPTEVENTFORSTATE(x, y) if (inputMonitor.state.current == x) {executeScriptsForEvent( y );}

EXECUTEFIXEDSCRIPTEVENTFORSTATE(INPUT_STATE_NOTOUCH, FIXED_SCRIPTING_EVENT_INPUT_STATE_CHANGED_TO_NOTOUCH);
EXECUTEFIXEDSCRIPTEVENTFORSTATE(INPUT_STATE_OVER_MOVED, FIXED_SCRIPTING_EVENT_INPUT_STATE_CHANGED_TO_OVER_MOVED);
EXECUTEFIXEDSCRIPTEVENTFORSTATE(INPUT_STATE_OVER_RELEASED, FIXED_SCRIPTING_EVENT_INPUT_STATE_CHANGED_TO_OVER_RELEASED);

#undef EXECUTEFIXEDSCRIPTEVENTFORSTATE(x, y)

这很好

4)问题,我怎么能这样做

#define EXECUTEFIXEDSCRIPTEVENTFORSTATE(x)\
if (inputMonitor.state.current == INPUT_STATE_(x)) {\
executeScriptsForEvent( FIXED_SCRIPTING_EVENT_INPUT_STATE_CHANGED_TO_(x) );
}\

所以我只需要

    EXECUTEFIXEDSCRIPTEVENTFORSTATE(NOTOUCH);

这应该相当于我现在的:

EXECUTEFIXEDSCRIPTEVENTFORSTATE(INPUT_STATE_NOTOUCH, FIXED_SCRIPTING_EVENT_INPUT_STATE_CHANGED_TO_NOTOUCH);

但是编译器声明 NOTOUCH 没有定义,所以我不能从 4 开始宏

最佳答案

token 串联?

#define EXECUTEFIXEDSCRIPTEVENTFORSTATE(x)\
if (inputMonitor.state.current == INPUT_STATE_ ## x) {\
executeScriptsForEvent(FIXED_SCRIPTING_EVENT_INPUT_STATE_CHANGED_TO_ ## x);\
}

关于C++ 宏代码替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5433971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com