私は独自の文字列クラスを作成しています (楽しみのために) が、少し問題が発生しました。クラスで ASCII 文字列と Unicode 文字列の両方を処理できるようにしたいと考えています。my クラスにを割り当てるconst wchar_t*
と、Unicode のフラグが設定されます。を割り当てた場合const char*
、Unicode フラグは設定されません。
さらに、Unicode 文字を ASCII 文字列に追加しようとすると、Unicode であるまったく新しい文字列を作成するか、そのバッファを再割り当てしてすべてを Unicode に変換します (どちらを行うかはわかりません)。
とにかく、私の質問に: std::string のc_str
関数に似たものが欲しいです。明らかに、const char*
ASCII 文字列を返す関数とconst wchar_t*
Unicode 文字列を返す関数の 2 つの異なる関数が必要です。
私の文字列がASCIIだとしましょう。関数を呼び出すとToAsciiString()
、文字列の内部ストレージへのポインターが返されるだけです。これは、文字列 dtor が自動的に行うため、手動で解放する必要はありません。
しかし、Unicode の ASCII 文字列が必要な場合は、ToUnicodeString()
. しかし、それは問題を引き起こします: ASCII 文字列を変換するために新しいバッファを割り当てる必要があります。それを行った場合、返されたポインターを手動で編集する必要があり、たとえばdelete[]
std::string の単純さが損なわれます。c_str
どうすればこれを適切に行うことができるかわかりません。