C ++では、クラスメンバーではない変換演算子を定義することは可能ですか?私は通常の演算子(+など)に対してそれを行う方法を知っていますが、変換演算子については知りません。
これが私のユースケースです。私はCライブラリを使用して、を渡しますPA_Unichar *
。ライブラリは、PA_Unicharを16ビット整数として定義します。これは実際にはUTF-16でコード化された文字列です。std::string
UTF-8でコード化されたものに変換したいと思います。私はすべての変換コードを準備して機能させていますが、次のように書くことができる構文糖衣が欠けているだけです。
PA_Unichar *libOutput = theLibraryFunction();
std::string myString = libOutput;
(通常、一時変数なしで1行になります)。
また注目に値する:
私はそれ
std::string
がからの暗黙の変換を定義していないことを知っています、char*
そして私はその理由を知っています。同じ理由がここでも当てはまるかもしれませんが、それは重要ではありません。からの正しい変換演算子を定義するのサブクラス
ustring
があります。それは機能しますが、これは代わりに変数を使用することを意味し、他のライブラリでそれらの文字列を使用する場合に変換する必要があります。ですから、それはあまり役に立ちません。std::string
PA_Unichar*
ustring
std::string
std::string
代入演算子はクラスメンバーでなければならないため、代入演算子の使用は機能しません。
それで、あなたが制御していない2つの型(私の場合はPA_Unichar*
とstd::string
)の間に暗黙の変換演算子を定義することは可能ですか?それはクラス型であるかもしれませんし、そうでないかもしれませんか?
そうでない場合、回避策は何でしょうか?