私の無知を許していただく必要がありますが、私は c++ でワイド文字セットを使用することに慣れていませんが、各リテラルの前に L を付けずに c++ でワイド文字列リテラルを使用できる方法はありますか?
もしそうなら、どのように?
いいえ、ありません。L プレフィックス (または、Unicode 用にコンパイルされた場合に L に展開される VC++ の _T() などのマクロ) を使用する必要があります。
新しい C++0x 標準では、これを行う別の方法が定義されています:
http://en.wikipedia.org/wiki/C%2B%2B0x#New_string_literals
関連するメモで..私は次のことをしようとしています
#define get_switch( m ) myclass::getSwitch(L##m)
これはマクロであり、展開されます
get_switch(isrunning)
の中へ
myclass::getswitch(L"isrunning")
これはc++visualstudio2008で正常に機能します
しかし、同じコードをmac Xcode(iphoneの場合)でコンパイルすると、次のエラーが発生します。
error: 'L' was not defined in this scope.
編集:解決策
#define get_switch( m ) myclass::getSwitch(L ## #m)
これはvc++とmacxcode(gcc)の両方で機能します
文字列リテラルの前に L を付けたくないのはなぜですか? これは非常に単純です。L のない文字列は ANSI 文字列 ( const char*
) であり、L のある文字列はワイド文字列 ( const wchar_t*
) です。TEXT()
Uncode を使用するように設定されている現在のプロジェクトに応じて、文字列リテラルを ANSI またはワイド文字列にするマクロがあります。
#ifdef UNICODE
#define TEXT(s) L ## s
#else
#define TEXT(s) s
#endif
_T()
と同等のマクロもありTEXT()
ます。