2008-11-03 9 views

Odpowiedz

25

Nie, nie ma. Musisz użyć przedrostka L (lub makra takiego jak _T() z VC++, który mimo to rozwija się do L po kompilacji dla Unicode).

+6

To nie jest do końca dokładne. makro _T() rozszerza się tylko do L w tobie zdefiniuj UNICODE. zasadniczo chodzi o to, by mieć go jako makro. jeśli chcesz, aby ciąg zawsze był unikodem, użyj L bezpośrednio. – shoosh

+0

Tak, oczywiście. Powinienem to wspomnieć. – Ferruccio

1

Dlaczego nie chcesz poprzedzać ciągów literowych literami L? To całkiem proste - ciągi bez L są ciągami ANSI (const char*), łańcuchy z L są ciągami o szerokich znakach (const wchar_t*). Istnieje TEXT() makro, co sprawia, że ​​ciąg dosłownego do ANSI lub ciągiem szerokich znaków w zależności od bieżącego projektu jest skonfigurowany do korzystania Uncode:


#ifdef UNICODE 
#define TEXT(s) L ## s 
#else 
#define TEXT(s) s 
#endif 

Istnieje również _T() makro, co jest równoważne TEXT() .

+0

czytamy w plikach może to być w Unicode i wyprowadzanie xml z Unicode, więc mapowanie konwersji, które robimy wewnętrznie porównuje Wstring z naszym literałem łańcuchowym. – Fry

+0

@ Adam - po prostu ciekawy - czy wiesz, że makra _T i TEXT są częścią standardowego języka lub czy są specyficzne dla MS VC++? –

+0

Jest to w WinNT.h (zawarte w windows.h). Nie traktowałbym tego jako specyficznego dla VC++, ale raczej specyficznego dla systemu Windows, ponieważ byłby dostępny w dowolnej konfiguracji, która pozwala budować aplikacje WinAPI. – KTC

3

na powiązana uwaga .. próbuję zrobić następujące

#define get_switch(m) myclass::getSwitch(L##m) 

który jest macro poszerzy

get_switch(isrunning) 

do

myclass::getswitch(L"isrunning") 

to działa prawidłowo w C++ VisualStudio 2008

ale kiedy skompilować ten sam kod pod mac Xcode (dla iPhone) pojawia się błąd:

error: 'L' was not defined in this scope. 

EDIT: Rozwiązanie

#define get_switch(m) myclass::getSwitch(L ## #m) 

działa to zarówno na vC++, jak i mac xcode (gcc)

+1

Nie powinno to być '#define get_switch (m) myclass :: getSwitch (L ## #m) '? –

+0

dziękuję, że rzeczywiście działa .. Miałem go do pracy z myclass :: getSwitch (L "" #m) również – ShoeLace