0
我目前正致力于将一些代码从Visual Studio移植到Mingw GCC。该代码在Visual Studio中构建并运行良好,但在Mingw GCC上存在一些问题。我遇到的一个问题是宏观扩张。我在这里简化了这个例子。将宏参数与文本连接起来
#define DECLARE_LEGACY_TYPES(ClassType) \
typedef LG_Wrapper::##ClassType##<LG_Wrapper::TA> ClassType; \
typedef LG_Wrapper::##ClassType##<LG_Wrapper::TB> ClassType##TPR; \
typedef LG_Wrapper::##ClassType##<LG_Wrapper::TC> ClassType##DBN; \
现在,当我试图建立这个我得到的错误(或多个)
error: pasting "::" and "GraphicsDevice" does not give a valid preprocessing token
typedef LG_Wrapper::##ClassType##<LG_Wrapper::TA> ClassType; \
^
note: in expansion of macro 'DECLARE_LEGACY_TYPES'
DECLARE_LEGACY_TYPES(GraphicsDevice);
^
error: pasting "GraphicsDevice" and "<" does not give a valid preprocessing token
DECLARE_LEGACY_TYPES(GraphicsDevice);
为什么我在MinGW的GCC得到这个问题,而不是在Visual Studio以及如何将我解决这个任何建议问题 ?
感谢职位。我现在正在测试这个 – MistyD
如果我删除前两个'##'不会参数替代停止?例如你发布的例子。对于第一种情况,使用'CONFORMING_DECLARE_LEGACY_TYPES(foo)'将产生'LG_Wrapper :: ClassType ClassType;而第二种情况产生'LG_Wrapper :: foo ClassType;'?而我想要第二种情况 –
MistyD
不,为什么呢?而你不想要第二种情况,你需要'LG_Wrapper :: foo foo'。预处理器标记'ClassType'的所有实例将被替换,就像在任何宏替换中一样。 –