7

Windows をターゲットにしていますが、作成している一部の API コードで基本的な C++ 型を使用できない理由がわかりません。私がやりたいことは、文字列と整数を返すメソッドを公開することです。C# の世界では文字列を使用し、Unicode 文字列を使用しますが、VC++ では、std::string、std::wstring、または MFC/ATL CString を使用するオプションがあります。

ユニコードをサポートするために std::wstring のみを使用する必要がありますか、またはビルド設定に基づいてユニコードにコンパイルされる std::string を使用できますか? 私は後者に傾いています。他の文字列型のオブジェクトに Get[Item]AsCString() メソッドを提供したいと思います。

また、整数の代わりに size_t を使用する必要がありますか?

この API は私が使用する予定であり、おそらく C++ GUI に取り組む将来の開発者も使用する予定です。懸念事項を分離する方法です。私の好み:

  • 他の開発者にとっての直感性。
  • VC++ との上位互換性
  • 他の C++ コンパイラとの互換性
  • パフォーマンス (これは私にとってはあまり問題ではありませんが、アプリの残りの部分の起動時間が必要です)

ガイドをいただければ幸いです。

4

3 に答える 3

2

おそらく、STL 文字列型に固執する必要があります。とにかく、MFC CString クラスはその上に構築されています。

前に述べたように、エンコードに複数の wchar を必要とする多くの Unicode 文字があるため、wstring の使用は Unicode の問題に対処する特効薬ではありません。

代わりに Utf-8 を使用すると、潜在的な利点があります (たとえば、エンディアンについて心配する必要はありません)。

Windows では、最新のカーネルはすべて wchar ベースであるため、API の 8 ビット char バージョンを使用すると、(最小限の) パフォーマンス オーバーヘッドが発生します。

于 2011-02-28T07:56:54.340 に答える
1

あなたの状況では、意見を述べて決定するのに数時間/数日かかります. まず第一に、C++ コードであっても、私は C++_API よりも C_API を非常に好みます。その場合、答えは char*、wchar*、または TCHAR* になります。ここで、UNICODE の必要性を本当に期待しているかどうかを推測してみてください。私のプロジェクトの大部分 (GUI を含むプロジェクトを含む) では、UNICODE は必要ありませんでした。単純な C 配列のシンプルさと親しみやすさは、多くの場合打ち負かすのが困難です。

要するに、あなたのニーズがどうなるかを予測してみてください。あまり先のことを考えようとせず (2 年が妥当です)、ニーズを満たす最も簡単な解決策を見つけてください。

最後: あなたの質問にもっと直接的に答えるために、評価する最初の選択肢として std::string から始めます。他の選択肢に有利な入札価格が見付からない限り、私はそのままにしておきます。

于 2011-02-27T20:24:12.503 に答える
1

MFC CString の代わりに std::wstring/string を使用すると、コードを他のフレームワーク (Qt for Windows など) に移植できます。

std::string を使用している場合でも、文字列を UTF-8 でエンコードできるため、API は引き続き UNICODE 文字列を返すことができます。wstring も実際には UTF-16 であり、完全な 32 ビットの UNICODE ではないことに注意してください (一部のオペレーティング システムでは wstring は UTF-32 です)。

于 2011-02-27T21:14:10.703 に答える