2011-03-25 50 views
1

1) - 我有两个枚举C++宏代码取代

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

+0

而你的问题是? – Nawaz 2011-03-25 14:46:40

+0

我不能使用宏4,因为编译器说NOTOUCH没有定义 – 2011-03-25 14:49:11

回答

4

令牌串联?

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

谢谢,这就是我需要的 – 2011-03-25 14:51:47

+0

必须等待5分钟,直到我可以标记为一个回答;))) – 2011-03-25 14:55:20

+0

啊,我很抱歉。 – walkingTarget 2011-03-25 14:56:32