일반적으로 MFC 프로그램을 작성 할때는 문자열을 다루기 위해 CString 클래스를 사용한다.

이 클래스는 CString 이라는 대표 이름이 있고, 프로젝트 옵션이 Multi byte 인 경우는 CStringA 로 UniCode 인 경우는 CStringW 로 자동 변환된다.

그러나 C++ Standard Library 의 string 은 그렇지 못한데, 이는 string이 대표 이름이 아니라 Multi byte string 의 클래스명이기 때문이다.
Unicode 의 경우는 wstring 으로 되어 있다.

이것을 자동으로 해결 하는 방법은 여러가지 있을것인데.. 대표적인 것으로 #ifdef 를 이용한 조건부컴파일이다.
하지만 이건 귀찮다.. 상당히

하지만 string 자체가 Templete 클래스라는것을 이용하면 간단히 해결 할 수 있다.
실제 string 과 wstring은

typedef basic_string<char> string;
typedef basic_string<wchar_t> wstring;

으로 선언 되어 있다.
그럼 답은 간단하지 않은가? string 을 선언할때

basic_string<TCHAR> 으로 선언 하면 된다. 그럼 간단하게 Unicode 와 Multibyte 양쪽에서 자동으로 변환 되는 문자열이 완성된다 : )



PS. 사실 이 팁은 쓸곳이 매우 한정되어있다.
왜냐면 모든 프로젝트를 Unicode 로 하는것이 퍼포먼스가 더 좋기 떄문이다(실제 Win32 Native API 에선 아예 Ansi 함수는 있지도 않으며, Win32API 에서 Ansi함수를 호출하면 자동으로 Unicode로 변환 후 Wide 함수를 재 호출한다)

즉 범용적인 라이브러리를 만들어 팔아먹을경우(그것도 소스포함 =_=;) 가 아니면 쓸데가 전혀없다