代碼使用從lexical_cast片段:啓用類與升壓:: 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;
}
基於document,
template<typename Target, typename Source>
Target lexical_cast(const Source& arg);
1>返回流ARG成一個標準庫 的結果基於字符串的流,然後作爲目標對象輸出。
2>源是OutputStreamable
3>目標是InputStreamable
問題1>對於用戶定義類型(UDT),如果OutputStreamable或InputStreamable總是必須處理std::string
?例如,給定一個包含簡單整數作爲成員變量的類,當我們定義operator<<
和operator>>
時,實現代碼的外觀如何?我必須將整數轉換爲字符串嗎?根據我的理解,似乎UDT總是必須處理std::string
以便與boost::lexical_cast
配合工作,而boost::lexcial_cast
需要中間std::string
來完成真正的轉換工作。
問題2>爲什麼的operator<<
在上面的代碼的返回值或operator>>
並不分別參考std::ostream&
std::istream&
或?
代碼不返回引用很可能是一個錯誤,因爲流不可複製。 – Xeo 2011-12-25 16:34:24
這是一個'lexical_castable :: read_'是一個const成員函數的錯誤 – q0987 2011-12-25 16:47:25
這是一個'lexical_castable :: print'包含'\ n'的錯誤。 – q0987 2011-12-25 18:57:15