3
是否有可能在不使用std::ostringstream::str()
成员函数创建std::string
进行搜索时搜索std::ostringstream
的内容?查询标准:: 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 10\n...\n" << true << "\n";
return 0;
}
[它不会导致我很在意,只是好奇任何性能问题,如果这是可能的。]
+1谢谢。只需要注意我必须使用'dynamic_cast(str.rdbuf())'来访问'pbase'和'pptr'。 –
hmjd
2012-04-04 14:00:46