如何声明名称已在外部库中定义的 class?
How to declare a class whose name is already defined in external library?
我在一个使用 OpenGL 的多平台项目中工作,到了需要查询当前上下文的地步。
在 windows 中,我使用了 wglGetCurrentContext(),包括 windows.h,效果很好。
另一方面,当尝试在 linux 中编译时,我正在使用 glXGetCurrentContext() 并包括 glx.h 内部包括 Xlib.h 和 X.h
碰巧在我的源代码中我有一个名为 Status 的 class 但在 Xlib 中有一个名为相同的宏,即 #定义 Status int,啊哈!现在是个大问题,因为我到处都用 class。
克服这个问题的最佳方法是什么?我现在想到的想法是
- 将我的 class 重命名为其他名称...但是为什么呢?
- 使用
#pragma push_macro("Status")
后接 #undef Status
- 找到一种更健壮和可移植的方式来查询 OpenGL 的上下文
如果您有任何其他建议,请告诉我,我非常感谢。
尝试将您的 类 放入命名空间。
至少,您可以将 glXGetCurrentContext() 隔离到它自己的翻译单元中:
myGlXGetCurrentContext.hpp
GLUint myGlXGetCurrentContext();
myGlXGetCurrentContext.cpp
#include<glx.h>
GLUint myGlXGetCurrentContext(){ return glXGetCurrentContext(); }
whatever.hpp
#include<myGlXGetCurrentContext.hpp>
...
我在一个使用 OpenGL 的多平台项目中工作,到了需要查询当前上下文的地步。 在 windows 中,我使用了 wglGetCurrentContext(),包括 windows.h,效果很好。
另一方面,当尝试在 linux 中编译时,我正在使用 glXGetCurrentContext() 并包括 glx.h 内部包括 Xlib.h 和 X.h
碰巧在我的源代码中我有一个名为 Status 的 class 但在 Xlib 中有一个名为相同的宏,即 #定义 Status int,啊哈!现在是个大问题,因为我到处都用 class。
克服这个问题的最佳方法是什么?我现在想到的想法是
- 将我的 class 重命名为其他名称...但是为什么呢?
- 使用
#pragma push_macro("Status")
后接#undef Status
- 找到一种更健壮和可移植的方式来查询 OpenGL 的上下文
如果您有任何其他建议,请告诉我,我非常感谢。
尝试将您的 类 放入命名空间。
至少,您可以将 glXGetCurrentContext() 隔离到它自己的翻译单元中:
myGlXGetCurrentContext.hpp
GLUint myGlXGetCurrentContext();
myGlXGetCurrentContext.cpp
#include<glx.h>
GLUint myGlXGetCurrentContext(){ return glXGetCurrentContext(); }
whatever.hpp
#include<myGlXGetCurrentContext.hpp>
...