簡體   English   中英

重寫的std :: ostream flush()函數未被std :: flush調用

[英]Overridden std::ostream flush() function not called by std::flush

我已經覆蓋了std::ostream::flush()函數。 下面我從示例中刪除了所有其他代碼:

#include <iostream>
#include <ostream>

class CMyStream : public std::streambuf, public std::ostream
{
    public:
        explicit CMyStream() throw() : std::ostream(this)
        {
            // Intentionally empty block
        }

        std::ostream &flush() 
        { 
            std::cout << "Overridden flush called\n"; 
            return (*this);
        }

        int sync()
        {
            std::cout << "Overridden sync called\n";
            return 0;   // Success
        }

};

我試着像這樣使用它:

CMyStream myStream;
myStream << "Test" << std::flush;

,但是重寫的CMyStream::flush()CMyStream::sync()函數不會被std::flush操作CMyStream::sync()調用。 如果我調試我看到默認的std::ostream::flush()被調用而不是我的覆蓋函數。

有沒有解決這個問題的方法,或者我是否必須直接調用myStream.flush()而不是操縱器?

問題是std::ostream::flush方法不是虛擬的,所以你不能正確覆蓋它,你不應該。 你應該做的是創建自己的緩沖類,繼承自std::basic_streambufstd::basic_filebufstd::basic_stringbuf並在那里覆蓋protected int sync()方法。 然后你的流類應該在它的構造函數中創建適當的緩沖區類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM