2017-11-03 22 views
0

저는 OpenGL을 사용하는 다중 플랫폼 프로젝트에서 현재 컨텍스트를 쿼리해야하는 지점에 도달했습니다. windows에서 을 사용했습니다. wglGetCurrentContext()windows.h을 포함하여 잘 작동했습니다. 한편 이름이 이미 외부 라이브러리에 정의되어있는 클래스를 선언하는 방법은 무엇입니까?

이 때 내부적 그것은 것을 일어나는 상태 Xh

Xlib.h을 포함 glx.h 포함 glXGetCurrentContext()를 사용하고있어 리눅스에서 컴파일 시도 내 소스 코드에서 나는 상태 인이라는 클래스를 가지고 있지만 매크로는 Xlib에서 동일하게 호출된다. 즉, #define Status int, Aha! 나는 지금까지 모든 수업을 사용하기 때문에 큰 문제가되었습니다.

이 문제를 극복하는 가장 좋은 방법은 무엇입니까? 지금 생각하고있는 아이디어는

  1. 내 수업 이름을 다른 이름으로 바꿉니다. 왜 그런가요?
  2. 사용 #pragma push_macro("Status") 내가 그것을 매우 appreaciate, 당신은 다른 추천 알려 경우는 OpenGL의 컨텍스트를

를 조회 할 수있는보다 강력한 휴대용 방법을 찾기 #undef Status

  • 하였다.

  • +2

    제한 glx.h 다음 매크로 정의를 해제를 포함하는 파일의 수. 머리글에 포함하지 마십시오! –

    +3

    고유 한 파일에서 종속성을 옮길 수 있습니까? 어디에서'#undef Status'를 안전하게 할 수 있습니까? – Jarod42

    답변

    3

    , 당신은 자신의 번역 단위로 glXGetCurrentContext()를 분리 할 수 ​​있습니다

    myGlXGetCurrentContext.hpp

    GLUint myGlXGetCurrentContext(); 
    

    myGlXGetCurrentContext합니다. cpp

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

    whatever.hpp

    #include<myGlXGetCurrentContext.hpp> 
    ... 
    
    -3
    +2

    MACRO는 네임 스페이스 범위를 가지고 있지 않습니다 ... – Jarod42

    +0

    저는 MACRO에 관한 것이 아니라 클래스에 관해 말하고있었습니다. – armo

    +0

    첫 번째 생각은 네임 스페이스 였지만 네임 스페이스가 무엇이든 상관없이 전 처리기가 이름을 대체 할 수 있으므로 문제를 생각한 후에 네임 스페이스가 도움이되지 않습니다. 그래도 대답 해 주셔서 감사합니다 – BRabbit27