lexical_castからのコード スニペット:
class lexical_castable {
public:
lexical_castable() {};
lexical_castable(const std::string s) : s_(s) {};
friend std::ostream operator<<
(std::ostream& o, const lexical_castable& le);
friend std::istream operator>>
(std::istream& i, lexical_castable& le);
private:
virtual void print_(std::ostream& o) const {
o << s_ <<"\n";
}
virtual void read_(std::istream& i) const {
i >> s_;
}
std::string s_;
};
std::ostream operator<<(std::ostream& o,
const lexical_castable& le) {
le.print_(o);
return o;
}
std::istream operator>>(std::istream& i, lexical_castable& le) {
le.read_(i);
return i;
}
ドキュメントに基づいて、
template<typename Target, typename Source>
Target lexical_cast(const Source& arg);
1> arg を標準ライブラリの文字列ベースのストリームにストリーミングした結果を返し、次に Target オブジェクトとして出力します。
2> ソースは OutputStreamable です
3> ターゲットは InputStreamable です
質問 1 > ユーザー定義型 (UDT) の場合、OutputStreamable または InputStreamable は常に処理する必要がありstd::string
ますか? たとえば、メンバー変数として単純な整数を含むクラスが与えられた場合、 and を定義するoperator<<
とoperator>>
、実装コードはどのようになりますか? 整数を文字列として変換する必要がありますか? 私の理解に基づくと、UDTは実際の変換ジョブを処理std::string
するために常に処理する必要があり、中間体を必要boost::lexical_cast
とするようです。boost::lexcial_cast
std::string
質問2 >上記のコードのoperator<<
orの戻り値がそれぞれorを参照していないのはなぜですか?operator>>
std::ostream&
std::istream&