查询std::ostringstream内容

Query std::ostringstream content

本文关键字:内容 ostringstream 查询 std      更新时间:2023-10-16

是否可以在不使用std::ostringstream::str()成员函数创建要搜索的std::string的情况下搜索std::ostringstream的内容?

我有以下内容,并希望避免在每次调用flush_()时构造std::string实例:

#include <iostream>
using std::cout;
#include <ios>
using std::boolalpha;
#include <sstream>
using std::ostringstream;
#include <string>
using std::string;
class line_decorating_ostream
{
public:
    line_decorating_ostream()  { out_ << boolalpha;  }
    ~line_decorating_ostream() { cout << out_.str(); }
    template <typename T>
    line_decorating_ostream& operator<<(const T& a_t)
    {
        out_ << a_t;
        flush_();
        return *this;
    }
private:
    ostringstream out_;
    line_decorating_ostream(const line_decorating_ostream&);
    line_decorating_ostream& operator=(const line_decorating_ostream&);
    // Write any full lines.
    void flush_()
    {
        string s(out_.str());
        size_t pos = s.find('n');
        if (string::npos != pos)
        {
            do
            {
                cout << "line: [" << s.substr(0, pos) << "]n";
                s = s.substr(pos + 1);
            } while (string::npos != (pos = s.find('n')));
            out_.clear();
            out_.str("");
            out_ << boolalpha << s;
        }
    }
};
int main()
{
    line_decorating_ostream logger;
    logger << "1 " << "2 " << 3 << " 4 " << 5 << "n"
           << "6 7 8 9 10n...n" << true << "n";
    return 0;
}

[这并没有引起我担心的任何性能问题,只是想知道这是否可能。]

使用其streambuf类?还是自己写一本?(好的:你应该写一个自己的:pbasepptr受到保护。)

class my_str_buffer : public basic_stringbuf<char>
{
  public:
    using basic_stringbuf<char>::pbase;
    using basic_stringbuf<char>::pptr;
};
my_str_buffer my_buf;
ostream str( &my_buf );
// do anything
string foo( str.rdbuf()->pbase(), str.rdbuf()->pptr() );

ostream构造函数和stringbuf