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

How to resolve it when class method and macro have the same name?

本文关键字:何解决 解决 类方法      更新时间:2023-10-16

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

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

我发现了一个关于宏命名冲突的类似问题:如何避免与 Windows 头文件中定义的宏发生名称冲突?

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

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

谢谢。

如果标准合规性不是必需的,请尝试push_macro/pop_macro编译指示

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

它适用于MSVC,GCC和CLANG

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

使用#ifdef检查..

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