4

Windows下,行后

#include <windows.h>

许多符号在全局命名空间中定义。例如,Polygon被定义。那么有没有方便的方法来使用这个符号来定义一个自定义类,如下所示?

class Polygon {
    ...
};

放入class Polygon自己的命名空间是否意味着每次使用时都必须使用该命名空间显式限定?换句话说,有没有办法隐藏或掩盖特定的定义windows.h?或者还有其他实用的解决方法吗?

我想到了:

#define Polygon Polygon_windows
#include <windows.h>
#undef Polygon

但这似乎很丑陋。

当然不能使用namespace windows { #include <windows.h> }.

4

2 回答 2

3

对这种宏的唯一真正防御是在实现文件中隔离定义和直接使用带有冲突名称的类。

请注意,这<windows.h>是关于任意宏定义的绝对最糟糕的定义之一,其中有成千上万个……

就在昨天,我注意到另一个这样的冲突,在和 Microsoft 自己的代码之间<windows.h>,或者更准确地说是在和之间。<windowsx.h>即宏与方法SelectFont冲突。CMFCButton::SelectFont免责声明:我还没有尝试过,但在这种情况下,微软似乎甚至没有避免与他们自己的代码发生名称冲突。

然后在. min_ 或者,有这样的用法。我最近没有检查。max<gdiplus.h>

所以,保重!:-)

于 2013-02-13T05:00:01.683 回答
-2

使用命名空间,这就是它们的用途!

namespace YourNamespace{
  class Polygon{ 
    //
  };
}

另一种解决方法是这样做:

#include <windows.h>
#define Polygon _Polygon

class _Polygon{ 
};
于 2013-02-13T04:57:11.630 回答