2010-07-13 4 views
2

TCHAR를 광범위하게 사용하는 다른 사람의 코드를 수정합니다. 내 코드에서 std :: wstring을 사용하는 것이 더 좋은가요? wstring은 widechar 플랫폼의 TString과 동일해야하므로 문제가 발생하지 않습니다. TCHAR을 지원하는 것보다 원시 wstring을 사용하는 것이 더 쉬운 이유가 있습니다 (예 : boost : wformat 사용).레거시 TCHAR 코드와의 인터페이스에 적합한 스타일

다음 유지 관리자에게 어떤 스타일이 더 명확 할 것입니까? 나는 문자열의 복잡성을 이해하려고 몇 시간을 낭비했다. 단지 wstring을 사용하는 것이 이해할 필요가있는 부분의 절반을 잘라내는 것 같다.

typedef std::basic_string<TCHAR> TString; //on winxp, TCHAR resolves to wchar_t 
typedef basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> > wstring; 

... 유일한 차이점은 할당 자입니다. [윈도우 9x의 컴퓨터에서 프로그램 땅은 여전히 ​​8 비트 문자로 당신의 UTF-16 문자열을 번역 할 수있는 API 층 을 거기에 드문 경우

. 새로운 코드 개발을 위해 TCHAR 을 사용할 때의 요점은 없습니다. source

+2

귀하의 관심사는 무엇입니까? C++ 컴파일러와 링커는 바이너리 비 호환성을 가지고 있다면 둘 다 알려줄 것입니다. 이것이 순전히 스타일 일 경우, 코드의 _ 관리자의 신발에 자신을 넣고 _her_에 가장 합리적인 유형 이름을 선택하십시오. –

+0

http://stackoverflow.com/questions/234365/is-tchar-still-relevant – dan04

답변

2

만 유니 코드 (wchar_t를) 플랫폼을 표적으로에하고자하는 경우 표준 : 형식 wstring을 사용하는 것이 더 낫다. 멀티 바이트 및 유니 코드 빌드를 지원하려면 TString 등을 사용해야합니다.

또한 basic_string은 char_traits와 allocator를 전달 된 문자 유형에 기초하여 기본값으로 설정하므로 유니 코드 (또는 _UNICODE, 나는 기억이 안나고), TString 및 wstring은 동일하게 빌드됩니다.

참고 : 여러 API에 인수를 전달하고 아무런 조작도 수행하지 않는 경우 std :: wstring 대신 (특히 Win32, COM 및 표준 C++ 코드를 혼합하는 경우) const wchar_t *을 사용하는 것이 좋습니다. 결국 적은 전환과 복사를하게 될 것입니다.

0

TCHAR은 바이너리를 두 번 컴파일하려고 할 때 더 중요했습니다. 한 번은 char, 두 번째는 wchar_t입니다.

원하는 경우 MSVC 프로젝트 설정을 MBCS에서 유니 코드로 변경하고 되돌릴 수 있습니다.

이것은 또한 Windows API를 호출 할 때 일치하는 데이터 형식을 갖게됨을 의미합니다.

관련 문제