[英]can i pass std::ostream& to a function expecting std::ofstream
[英]Having a class that has a write function, how to I pass it to a function accepting std::ostream&
我有一個 class 的實例,它實現了一個這樣的寫入接口:
struct Writer {
virtual size_t write(const char* buffer, size_t size, size_t offset) = 0;
};
我還有一個 function 將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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.