[英]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_streambuf
或std::basic_filebuf
或std::basic_stringbuf
並在那里覆蓋protected int sync()
方法。 然后你的流類應該在它的構造函數中創建適當的緩沖區類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.