各文字の前にLを付けずにC ++でワイド文字列リテラルを使用する方法
質問
あなたは私の無知を許さなければならないでしょうが、私は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)
into
myclass::getswitch(L"isrunning")
これはc ++ visualstudio 2008で正常に動作します
しかし、Mac Xcode(iPhoneの場合)で同じコードをコンパイルすると、エラーが発生します:
error: 'L' was not defined in this scope.
編集:ソリューション
#define get_switch( m ) myclass::getSwitch(L ## #m)
これは、vc ++とmac xcode(gcc)の両方で動作します
なぜ文字列リテラルの先頭にLを付けたくないのですか? Lのない文字列はANSI文字列( const char *
)、Lの文字列はワイド文字列( const wchar_t *
)です。 TEXT()
マクロがあります。これは、文字列リテラルをANSIにするか、現在のプロジェクトに応じてワイド文字列を作成し、Uncodeを使用するように設定します。
#ifdef UNICODE
#define TEXT(s) L ## s
#else
#define TEXT(s) s
#endif
_T()
マクロもあります。これは TEXT()
と同等です。
所属していません StackOverflow