簡體   English   中英

擁有一個具有寫入 function 的 class,如何將其傳遞給接受 std::ostream& 的 function

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM