假設我們有一個istream
子用下面的方法:如果有關於流的「超載衝突」會發生什麼?
SomeStream& operator>>(Something& something) {
// .. write data into something
}
而且我們也有以下全局方法:
Something& operator>>(istream& stream, Something& something) {
// .. write data from stream into something
}
如何C++知道調用以下代碼方法:
instanceOfSomeStream >> instanceOfSomething;
跟進的問題: SomeStream
寫入Something
的更好或更常見的方法是什麼?我應該在SomeStream
中添加另一個過載operator>>
,這需要Something&
參數嗎?或者我應該以相反的方式,並在Something
中創建一個過載,需要SomeStream
? (實際上不是在Something
,而是因爲顯而易見的原因作爲全局函數)。
正常情況下,當你使用'std :: istream'或者'std :: ostream'時,就是爲了包裝自定義的'std :: streambuf'。如果您需要爲某個類型提供I/O功能,可以像第二個代碼塊中那樣通過重載全局的'operator >>()'/'operator <<()來完成。任何自定義的行爲'SomeStream'可能會展示應該與它可能使用的緩衝區相關,否則不值得創建另一個流類型。 – 0x499602D2 2014-10-11 01:56:09