Является ли boost :: asio :: streambuf недоступным для поиска? - PullRequest
0 голосов
/ 07 ноября 2018

Мне нужен аккуратный потоковый буфер для поиска в моем приложении, и у меня уже есть boost :: asio, интегрированный с асинхронными сокетами и таймерами. Я хотел также попытаться интегрировать буфер, который можно использовать в качестве потока, также с возможностями поиска. Я попытался обернуть boost :: asio :: streambuf в std :: iostream, и функции Tell возвращают -1, и я получаю исключение при поиске.

Я использую это неправильно, или я использую неправильный объект буфера для того, что мне нужно?

BufferTest.cpp

#include <boost/asio/streambuf.hpp>
#include <iostream>

/**
 * Main when we come in
 */
int main( int argc, char *argv[] )
{
    boost::asio::streambuf streambuf;
    std::iostream stream( &streambuf );


    try
    {
        stream.exceptions ( std::iostream::failbit | std::iostream::badbit );

        stream.write( "hello", 5 );
        stream.write( "test", 4 );

        std::cout << "Step 1" << std::endl;

        char buffer[ 9 ];
        stream.read( buffer, 9 );

        std::cout << "Step 2" << std::endl;

        std::cout << "The worst: " << std::string( buffer, 9 ) << std::endl;

        std::cout << "Step 3" << std::endl;

        stream.seekg( 0 );

        std::cout << "Step 4" << std::endl;

        stream.read( buffer, 9 );
        std::cout << "The worst: " << std::string( buffer, 9 ) << std::endl;
    }
    catch( const std::exception &e )
    {
        std::cerr << "Exception: " << e.what() << std::endl;
    }
}

выход :

$ ./bin/buffer_test 
Step 1
Step 2
The worst: hellotest
Step 3
Exception: basic_ios::clear: iostream error
...