2012-03-19 4 views
0

나는이 같은 std 네임 스페이스를 새롭게 정의 된 STLport라는 라이브러리를 사용하고 있습니다 :이 때문에이름이 수정 된 후에 원래 네임 스페이스로 되돌리려면 어떻게해야합니까?

# if defined (_STLP_REDEFINE_STD) 
/* We redefine "std" to "stlport", so that user code may use std:: transparently */ 
# undef std 
# define std STLPORT 
# else 

, 내가 std::something를 사용하려고 사상 내 코드를, 그것은 _STLP::something로 대체됩니다.

라인을 주석 처리하면 기존 프로젝트의 코드가 컴파일되지 않습니다.

줄을 주석 처리하지 않으면 stlport에서 사용하는 할당 자의 집합과 std::을 사용하기 때문에 추가하려고하는 새 라이브러리가 컴파일되지 않습니다. 유형 충돌.

새 라이브러리를 포함하기 직전에 #define STLPORT std을 온라인에서 시도했지만이 #define이 작동하지 않는 것 같습니다.

std 정상적으로 사용할 수있는 방법이 있나요?

# if defined (_STLP_REDEFINE_STD) 
# undef std 
# define std STLPORT 
# else 

//.... 

#ifdef std 
#define std_WAS_DEFINED 
#undef std 
#endif 

//new code 

#ifdef std_WAS_DEFINED 
#define std STLPORT 
#endif 

//legacy code 

답변

1

당신은 STL의 두 가지 구현의 된 STLport 한 표준 라이브러리에 하나를 가지고 :

+0

표준 컨테이너를 교환 할 필요는 없지만'-I'를 사용하려면 솔루션의 별도 프로젝트의 일부로 새 코드를 유지해야합니다.이전 코드와 동일한 프로젝트에서 새 코드를 사용할 수 없습니까? 저는 한 달 동안이 문제에 봉착했습니다. 고맙습니다! 다음에 시도 할 것은 stlport를 std로 바꾸는'/ D '였습니다. – Nav

+0

Visual Studio에 익숙하지 않습니다. 아마도 가장 쉬운 해결책은 다른 프로젝트에서 이전 코드와 새 코드를 유지하는 것입니다. 확실하지 않습니다. –

1

당신은 같은 것을 사용할 수 있습니다. 이전 코드에는 STLPORT가 필요하고 새 코드에는 표준 라이브러리가 필요합니다. include <vector> 같은

신규 및 이전 코드 사용 일들이 있지만 다른vector라는 이름의 파일, 따라서 다른 -I 컴파일러 플래그를 포함해야합니다. 동일한 컴파일러 설정으로 컴파일 할 수 없습니다.

표준 컨테이너와 이전 코드와 새 코드간에 다른 STL 관련 데이터를 교환 할 필요가없는 경우 STLPORT 설정을 사용하여 이전 코드를 컴파일하고 일반 설정을 사용하여 새 코드를 컴파일 할 수 있습니다. STLPORT 포함을 만지지 마십시오. 코드에 std을 다시 정의하지 마십시오. STLPORT는 그런 용도로 사용되지 않습니다. 표준 라이브러리의 일부분을 대체하는 드롭 인으로 사용됩니다. 자신의 (또는 STLPORT) 소스를 수정하는 것이 아니라 올바른 컴파일러 플래그를 선택하여 어떤 것을 사용할지 선택합니다.

기존 코드와 새 코드 사이에 표준 컨테이너를 교환해야하는 경우 운이 없게됩니다. 유일한 기준은 레거시 코드가 표준을 준수하도록 수정하는 것입니다.

+0

'#undef std'가 효과가 있었지만'std'는 아무것도 포함하지 않았다고 생각합니다. \t * 59 \t intelliSense : #include * "C : \를 사용하기 전까지 네임 스페이스"std "에 멤버"vector "*가 없습니다. Program Files \ Microsoft Visual Studio 10.0 \ VC \ include \ vector "오류가 사라졌습니다. 'std' 네임 스페이스 전체를 되돌릴 수있는 방법이 있습니까? 또는 네임 스페이스에 포함 된 내용을 확인하는 방법? – Nav

+1

@Nav 실제로 컴파일 했습니까? Intellisense는 컴파일러가 아닙니다. –

+0

알아요 ... 컴파일을했는데 컴파일러 오류가 없었지만 제 질문은 남아 있습니다. – Nav