広文字列の構造りたいのですか?CString vs wstring
質問
いMFCアプリケーションのC++を使用しstd::文字列std::wstring、頻繁にかぶりから、皆さんのその他のナンセンスです。い標準化も単一のフォーマットで破壊も修復もおもしろくないはCStringはstd::wstring.
プリケーションに私を生成しなければならないから文字列を文字列テーブルの作品にみられる多くのwindows電話を必要とする一定のtcharはwchar_tポインタの編集-管理との交流COMオブジェクトのAPIを必要とするBSTR.
またベクトルの文字列でも問題ありませベクトルのCStrings?
どれがいいですか?その是非に?
例
BSTRにwstring
CComBSTR tstr;
wstring album;
if( (trk->get_Info((BSTR *)&tstr)) == S_OK && tstr!= NULL)
album = (wstring)tstr;
wstringをBSTR
CComBSTR tstr = path.c_str();
if(trk->set_Info(tstr) == S_OK)
return true;
Stringリソースへのwstring
CString t;
wstring url;
t.LoadString(IDS_SCRIPTURL);
url = t;
GetProfileString()を返しまCString.
整数の文字列フォーマット:
wchar_t total[32];
swprintf_s(total, 32, L"%d", trk->getInt());
wstring tot(total);
解決
のstd ::のbasic_string <>(あるいは、むしろその専門分野)との仕事に恐ろしいです、それは芋STLの主要な欠点の一つだ(と私は一般的にC ++を言うと思います)。方法はありません「原因、のbasic_string <>で可変サイズの文字を示し、これはあなたの文字のサイズを定義することができることである2010年、勘弁してくれよ十分ではありません - それも、エンコーディングについて知りません。さて、UTF-8は、CStringの持つと仕事に素敵ではないですが、それはのbasic_stringでそれをやろうとしているように悪いようではありません。私は、標準溶液がより良い代替手段よりであることを上記のポスターの精神に同意しながら、(プロジェクトがとにかくMFCやATLを使用している場合)、CStringのはSTDよりと仕事に非常に良くある::文字列/ wstringの:ANSI / Unicodeの間の変換(本当に?.c_str()?)BSTR、文字列テーブルから読み込み、TCHARにキャスト演算子、(CStringAとCStringWを介して)、...
のCStringはまた、安全で多少醜いではない、便利であるが、フォーマット()を有します。あなたが安全な書式設定ライブラリを好む場合は、あなたがより良いオフのbasic_stringとなります。
さらに、CStringのは、トリム、分割などとしてのbasic_stringに行うことのためにあなたがブースト文字列ユーティリティが必要になりますことをメンバ関数としていくつかのアルゴリズムを持っています。
のCStringのベクターは問題ありません。
Windows専用であること、それに基づいてのCStringの独断的な解雇に対するガード:あなたがWindowsのGUIでそれを使用する場合、アプリケーションはとにかくWindows専用です。ことで、あなたのコードは、将来的には、クロスプラットフォームである必要がありますことを万が一がある場合、あなたは<>のbasic_stringで立ち往生するつもりだ、と述べました。
他のヒント
私は個人的にあなたがCOMを使用して、CString
sでの作業、およびMFCでこれを書いていることをあなたの状態から、この場合はBSTR
sとなるだろう。 wstring
sは次のようになりながら、より多くの規格では、あなたが一方から他方への変換定数の問題に実行されます準拠します。他のOSは、WindowsおよびMFCのようにCOMを持っていないので、あなたはCOMと協力し、MFCでそれを書いているので、それを作る心配する本当の理由はありません、クロスプラットフォーム、すでにWindowsにあなたをロックされます。
、CString
sもBSTR
sにヘルプ負荷文字列と変換するために、機能を内蔵しており、全て既製のと、既にWindowsで動作するように構築された、などです。あなたが一つのフォーマットを標準化する必要がありながら、なぜで動作するように、それが容易になりません?
のstd :: wstringのは、はるかにポータブル、およびSTL中とブーストの既存の作成済みのコードの多くの恩恵を受けるだろう。 CStringのは、おそらく窓のAPIので良く行くだろう。
wchat_t:あなたがとにかく必要なのwchar_tポインタを取得するので、あなたは、データ()関数を使用して、任意の時間をwstringの外のデータを得ることができることを覚えておいてください。
BSTR:使用)(wstring.dataのうち、BSTRを取得するために、SysAllocString
プラットフォーム依存についてはは、あなたが単一の文字の長さになりたいものに基づいて、独自の文字列を定義するためにstd::basic_string<T>
を使用できることを覚えています。
私は毎日wstringのために行くだろう....