当类方法和宏具有相同的名称时,如何解决它?

时间:2017-03-21 02:44:20

标签: c++ macros

我在升级类时遇到问题,需要导入外部库。

例如,我正在编辑一个名为CFoo的类,它有一个公共方法SendMessage()。 它工作正常,直到我需要包含一个库 - 其中包含一个名为SendMessage()的宏。它导致我当前代码完全混乱,因为包含SendMessage()的所有部分都被宏替换。

我发现了一个关于宏命名冲突的类似问题: How do I avoid name collision with macros defined in Windows header files?

但是在我的情况下,公共方法名称不能更改,因为它已经发布并在其他项目中使用。

有没有办法不使用或包含特定的宏,或者指定在调用函数时是否应该使用宏或方法?

非常感谢。

2 个答案:

答案 0 :(得分:0)

我有一个模糊的方法来解决它。

使用#ifdef ..

进行检查

如果是这样,请使用" #undef"取消定义它。在调用你的函数之前。

答案 1 :(得分:0)

如果不符合标准合规性,请尝试push_macro / pop_macro pragma

#pragma push_macro("SendMessage")
#undef SendMessage
//your stuff
#pragma pop_macro("SendMessage")

适用于MSVC,GCC和CLANG