WideStudio Programming (2-1)~文字列型について

WideStudio/MWTにはWSCstring型という独自の文字型クラスが定義されています。WideStudioのAPIを使う際には必須なのですが、あまりこれに依存するようにはしたくなかったので、プログラム中の殆どの文字列はstd::string型でutf-8のmbcs文字列を格納しておき、WideStudio/MWTのライブラリに渡すところでWSCstring型と相互に変換するようにしています。

ご存知のようにC++の標準ライブラリにはwchar_tというワイド文字向けの型が定義されており、それ用のstd::wstringというのも定義されていますけれど、wchar_t自体はビット長を含め標準では殆ど何も規定されておらず、実際Windows向けの環境(utf-16le)とLinux向けの環境(utf-32、little endian/big endianは処理系依存?)とでベースになっている型が違っていたりして、あまり使い勝手がよくありません。

タンゴレンでは内部の文字列の格納や処理で使う型は、utf-8はstd::stringを使い、utf-16はstd::wstring(Windows APIに渡す必要があるケース)か、ICUライブラリが規定しているもの(ICU ライブラリを使う場合)、或いは別に定義した自前のもの(basic_stringテンプレートをunsigned shortで実体化したもの)を状況に応じて使い分けています。utf-32にも自前の型を定義してありますが、最終的にこれを使っている場所は無くなりました。

余談ですが、C/C++の新しい規格にはchar16_t/char32_t型と、同じ様にbasic_stringテンプレートから作られるu16string/u32stringクラスが提供されています。ソースファイルの文字コードによらずunicode文字列を指定するためのU””キーワードも導入されているようです。これらが多くのコンパイラで日常的に使えるようになれば、C/C++プログラミングの書き方も随分と変わりそうな気がします。