1
標誌的io_base我稱之爲物流設置的std ::自定義流類
class Stream
public:
Stream& operator<<(int i) { stream_ << i; return *this;}
template <typename CustomClass>
Stream& operator<<(const CustomClass& c) { stream_ << c.toString() /* assume this template always have toString(); return *this; }
private:
std::stringstream stream_;
};
這是什麼,我其實有一個非常簡單的例子一個自定義類。我試圖設置如下std :: ios_base標誌:
Stream() << 1 << std::hex << 2;
using operator;
Stream& operator<<(std::ios_base& b) { stream_.setf(b.flags()); return *this; }
從我的理解,因爲std :: hex返回std :: ios_base所以它應該調用這個並設置流的標誌。但它總是稱之爲模板。注意:如果我刪除了這個模板,那麼所有的工作都和你期望的一樣好,但是有兩種方法嗎?
請隨時進一步問,如果你需要更多的澄清
只是爲了澄清多一點什麼,我想就是讓** **的ios_base重載運算符重要在模板上。我相信這是非常奇怪的行爲,因爲模板應該放在最後,如果沒有其他類型可以在編譯時解決它應該被使用。我相信std庫在所有其他庫之前是鏈接的。 – abumusamq
順便說一句,即使我返回'std :: ios_base&'和返回流,這不工作我的意思是它仍然通過類型過載調用模板 – abumusamq