【发布时间】:2021-05-29 01:15:55
【问题描述】:
我有一个类的实例,它实现了这样的书写接口:
struct Writer {
virtual size_t write(const char* buffer, size_t size, size_t offset) = 0;
};
我还有一个函数,它将std::ostream& 作为参数并写入它。像这样:
void foo(std::ostream& os) {
os << "hello world"; // Say, I don't control this code
}
让foo 写入我的Writer 接口实例的最简单方法是什么?
Reader 接口和std::istream 的奖励积分。
编辑:
也许我还应该提到,我必须假设foo 将大量数据写入std::ostream,因此foo 先写入std::stringstream 然后再写入Writer 的解决方案不会工作。
【问题讨论】:
-
让 foo 接受
Writer&吗?还是让Writer对std::ostream&进行操作? -
您将需要创建自己的派生自
ostream的类,并拥有与Writer的接口。这同样适用于istream案例。 -
@StephenNewell 不,在这种情况下我不能修改
foo或Writer,我只能创建某种包装器,它要么被std::ostream本身使用,要么派生自它. -
也许this question 可以提供帮助。
-
我会编写一个自定义的
std::basic_streambuf类,输出到Writer,然后实例化一个标准的std::ostream对象,将我的streambuf传递给它的构造函数。