首頁 > 後端開發 > C++ > 如何處理自訂流運算子重載中的'std::endl”?

如何處理自訂流運算子重載中的'std::endl”?

DDD
發布: 2024-12-08 08:26:12
原創
237 人瀏覽過

How to Handle `std::endl` in Custom Stream Operator Overloading?

自訂流實作中的運算子重載和處理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;
    }
};
登入後複製

此自訂實作定義了運算子

  • 第一種類型是通用函數指針,它接受對MyStream 物件的引用並傳回對相同物件的參考。
  • 第二種類型是專門取得對 MyStream 物件的參考並傳回對相同物件的參考的函數指標。

這允許實作自訂 endl 函數在自訂流上運行。

以上是如何處理自訂流運算子重載中的'std::endl”?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板