如何解决有一个具有 write 函数的类,如何将它传递给接受 std::ostream& 的函数
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
将不起作用。
解决方法
使用来自 A custom ostream 的代码,我能够编写:
#include <iostream>
#include <sstream>
struct Writer {
virtual size_t write(const char* buffer,size_t size,size_t offset) = 0;
};
Writer& getWriter();
void foo(std::ostream& os);
struct WriteToWriter : public std::stringbuf {
Writer& w;
std::size_t offset{0};
WriteToWriter(Writer& w) : w(w) {}
virtual std::streamsize xsputn(const char_type* s,std::streamsize n) override {
const size_t r = w.write(s,n,offset);
offset += r;
return r;
}
virtual int_type overflow(int_type c) override {
if (c == EOF) return EOF;
char tmp = c;
const size_t r = w.write(&tmp,1,offset);
offset += r;
return r == 1 ? c : EOF ;
}
};
int main()
{
WriteToWriter wtw(getWriter());
std::ostream out(&wtw);
foo(out);
}
看起来应该直接写入 Writer::write
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。