如何声明名称已在外部库中定义的 class?

How to declare a class whose name is already defined in external library?

我在一个使用 OpenGL 的多平台项目中工作,到了需要查询当前上下文的地步。 在 windows 中,我使用了 wglGetCurrentContext(),包括 windows.h,效果很好。

另一方面,当尝试在 linux 中编译时,我正在使用 glXGetCurrentContext() 并包括 glx.h 内部包括 Xlib.hX.h

碰巧在我的源代码中我有一个名为 Status 的 class 但在 Xlib 中有一个名为相同的宏,即 #定义 Status int,啊哈!现在是个大问题,因为我到处都用 class。

克服这个问题的最佳方法是什么?我现在想到的想法是

  1. 将我的 class 重命名为其他名称...但是为什么呢?
  2. 使用 #pragma push_macro("Status") 后接 #undef Status
  3. 找到一种更健壮和可移植的方式来查询 OpenGL 的上下文

如果您有任何其他建议,请告诉我,我非常感谢。

尝试将您的 类 放入命名空间。

http://en.cppreference.com/w/cpp/language/namespace

https://msdn.microsoft.com/en-us/library/5cb46ksf.aspx

至少,您可以将 glXGetCurrentContext() 隔离到它自己的翻译单元中:

myGlXGetCurrentContext.hpp

GLUint myGlXGetCurrentContext();

myGlXGetCurrentContext.cpp

#include<glx.h>
GLUint myGlXGetCurrentContext(){ return glXGetCurrentContext(); }

whatever.hpp

#include<myGlXGetCurrentContext.hpp>
...