自訂流實作中的運算子重載和處理std::endl
考慮以下程式碼片段,其中運算子
template <typename T> UIStream& operator<< (const T); UIStream my_stream; my_stream << 10 << " heads";
雖然這按預期工作,但嘗試使用my_stream
要解決此問題,重要的是要了解std:: endl 不是物件而是函數。在 std::cout 中,它是透過實作運算子
運算子的自訂實作
struct MyStream { template <typename T> MyStream& operator<< (const T& x) { std::cout << x; return *this; } // Function that takes a custom stream and returns it typedef MyStream& (*MyStreamManipulator)(MyStream&); // Accept function with custom signature MyStream& operator<< (MyStreamManipulator manip) { return manip(*this); } // Define a custom endl for this stream (matches MyStreamManipulator signature) static MyStream& endl(MyStream& stream) { std::cout << std::endl; stream << "Called MyStream::endl!" << std::endl; return stream; } };
此自訂實作定義了運算子
這允許實作自訂 endl 函數在自訂流上運行。
以上是如何處理自訂流運算子重載中的'std::endl”?的詳細內容。更多資訊請關注PHP中文網其他相關文章!