尝试从boost :: iostreams访问源设备

时间:2017-05-30 17:16:42

标签: c++ boost boost-iostreams

我编写了一个自定义源设备,用于计算到目前为止读取的字节数:

class socket_stream_source : public boost::iostreams::source
{
public:

    int readSoFar=0;

    socket_stream_source(socket_ptr sock) : _sock(sock)
    {

    }

    std::streamsize read(char* s, std::streamsize n)
    {
        int readCount = _sock->read_some(boost::asio::buffer(s, n));
        readSoFar += readCount;
        return readCount;
    }

private:
    socket_ptr _sock;

};

我正在使用它:

boost::iostreams::stream<socket_stream_source> in(sock);

如何访问我的readSoFar变量?

或者还有另一种方法可以计算到目前为止从istream中读取的字节数吗?

1 个答案:

答案 0 :(得分:1)

只需使用boost :: iostreams :: stream提供的设备访问操作符,即

T& operator*();
T* operator->();

在你的代码中,这就足够了:

in->readSoFar;