Как объявить класс, имя которого уже определено во внешней библиотеке?

Я работаю в мультиплатформенном проекте, использующем OpenGL, и дошел до того, что мне нужно было запрашивать текущий контекст.
В Windows я использовал wglGetCurrentContext () в том числе windows.h это работало нормально.

С другой стороны, когда пытался скомпилировать в Linux, я использую glXGetCurrentContext () и в том числе glx.h который внутренне включает Xlib.h а также X.h

Бывает, что в моем исходном коде у меня есть класс Статус но в Xlib есть макрос, называемый тем же самым, т.е. #define Status int, Ага! большая проблема сейчас, так как я использую свой класс везде.

Что было бы лучшим способом преодолеть эту проблему? Идеи, которые я имею в виду прямо сейчас,

  1. Переименуйте мой класс в другое … но почему?
  2. использование #pragma push_macro("Status") с последующим #undef Status
  3. Найдите более надежный и переносимый способ запроса контекста OpenGL

Если у вас есть другие рекомендации, дайте мне знать, я очень ценю их.

0

Решение

Как минимум, вы можете изолировать glXGetCurrentContext () в свой собственный модуль перевода:

myGlXGetCurrentContext.hpp

GLUint myGlXGetCurrentContext();

myGlXGetCurrentContext.cpp

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

whatever.hpp

#include<myGlXGetCurrentContext.hpp>
...
3

Другие решения

Попытайтесь поместить Ваши классы в пространство имен.

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

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

-3

По вопросам рекламы [email protected]