2

TCHARを広範囲に使用する他の誰かのコードを変更しています。コードでstd::wstringを使用する方が良い形式ですか?wstringは、widecharプラットフォームのTStringと同等である必要があるため、問題は発生しません。理論的根拠は、TCHARをサポートするよりも生のwstringを使用する方が簡単です...たとえば、boost:wformatを使用することです。

次のメンテナにとって、どちらのスタイルがより明確になりますか?文字列の複雑さを理解しようとして数時間を無駄にしました。wstringを使用するだけで、理解する必要のあるものの半分が削減されるようです。

typedef std::basic_string<TCHAR> TString; //on winxp, TCHAR resolves to wchar_t
typedef basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> > wstring;

...唯一の違いはアロケータです。

プログラムがWindow9xマシンに到達するというまれなケースでは、UTF-16文字列を8ビット文字に変換できるAPIレイヤーがまだあります。新しいコード開発にTCHARを使用しても意味がありません。 ソース

4

2 に答える 2

2

Unicode(wchar_t)プラットフォームのみを対象とする場合は、std::wstringを使用することをお勧めします。マルチバイトおよびUnicodeビルドをサポートする場合は、TStringなどを使用する必要があります。

また、basic_stringは、渡された文字タイプに基づいてchar_traitsとallocatorをデフォルトで1に設定するため、UNICODE(または_UNICODE、どちらかは思い出せません)、TString、およびwstringが同じになるビルドに注意してください。

注:引数をさまざまなAPIに渡すだけで、それらを操作しない場合はconst wchar_t *、std :: wstringの代わりに直接(特にWin32、COM、および標準のC ++コードを混在させる場合)使用することをお勧めします。変換とコピーが少なくなります。

于 2010-07-13T21:36:30.727 に答える
0

TCHARは、バイナリを2回コンパイルする場合に重要でした。1回はchar用、もう1回はwchar_t用です。

必要に応じて、MSVCプロジェクトの設定をMBCSからUnicodeに変更したり、元に戻したりして、この選択を行うこともできます。

これは、Windows APIを呼び出すときに、一致するデータ型を持つことも意味します。

于 2010-07-13T21:40:14.857 に答える