重写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 calledn";
return (*this);
}
int sync()
{
std::cout << "Overridden sync calledn";
return 0; // Success
}
};
我试着这样使用它:
CMyStream myStream;
myStream << "Test" << std::flush;
,但覆盖的CMyStream::flush()
或CMyStream::sync()
函数不被std::flush
操纵符调用。如果我调试,我看到默认的std::ostream::flush()
被调用,而不是我的覆盖函数。
是否有解决这个问题的方法,或者我必须直接调用myStream.flush()
而不是操纵器?
问题是std::ostream::flush
方法不是虚拟的,所以您不能正确地覆盖它,也不应该这样做。您应该做的是创建自己的缓冲类,继承自std::basic_streambuf
或std::basic_filebuf
或std::basic_stringbuf
,并在那里覆盖受保护的int sync()
方法。你的流类应该在它的构造函数中创建合适的缓冲区类型。
相关文章:
- 使用std::multimap迭代器创建std::list
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 从持续时间构造std::chrono::system_clock::time_point
- std::具有相同基类的类的变体
- std::向量与传递值的动态数组
- 使用std::vector的OpenCL矩阵乘法
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- std::condition_variable::wait()如何评估给定的谓词
- 如何获取std::result_of函数的返回类型
- std::stringstream::flush() 应该做什么吗?
- std::flush可以用于将对象指针转换为其封闭数组指针吗
- std::flush 不起作用,而 std::endl 可以
- std::flush、std::vector和move只能构造类型
- std :: ostringstream和flush成员功能
- 重写std::ostream flush()函数,不被std::flush调用
- 没有“std::flush”,表示分割错误
- std::flush是如何工作的