首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将流加倍

将流加倍
EN

Stack Overflow用户
提问于 2011-09-07 22:18:37
回答 5查看 191关注 0票数 5

我使用cerr流作为我的错误输出,但我也想将这个错误输出保存在内存中的字符串流中。

我想把这件事变成:

代码语言:javascript
复制
stringstream errorString;
cerr << " Something went wrong ";
errorString << " Something went wrong ";

转到

代码语言:javascript
复制
myErr << " Something went wrong ";

其中myErr是一个类的实例,它将其存储在字符串流中,并输出到cerr。

谢谢你的帮助。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-09-07 22:36:15

您可以像这样创建myErr类的类型:

代码语言:javascript
复制
class stream_fork
{
    std::ostream& _a;
    std::ostream& _b;

public:
    stream_fork( std::ostream& a, std::ostream& b)
        :   _a( a ),
            _b( b )
    {
    }

    template<typename T>
    stream_fork& operator<<( const T& obj )
    {
        _a << obj;
        _b << obj;
        return *this;
    }

    // This lets std::endl work, too!
    stream_fork& operator<<( std::ostream& manip_func( std::ostream& ) )
    {
        _a << manip_func;
        _b << manip_func;
        return *this;
    }
};

用法:

代码语言:javascript
复制
stream_fork myErr( std::cerr, errorString );
myErr << "Error Message" << std::endl;
票数 3
EN

Stack Overflow用户

发布于 2011-09-07 22:33:28

您可以使用Boost.IOStreams

代码语言:javascript
复制
#include <boost/iostreams/tee.hpp>
#include <boost/iostreams/stream.hpp>
#include <iostream>
#include <sstream>

namespace io = boost::iostreams;

int main() {
    std::stringstream ss;
    io::tee_device<decltype(ss), decltype(std::cerr)> sink(ss, std::cerr);
    io::stream<decltype(sink)> stream(sink);
    stream << "foo" << std::endl;
    std::cout << ss.str().length() << std::endl;
    return 0;
}
票数 2
EN

Stack Overflow用户

发布于 2011-09-07 22:22:08

覆盖MyErr类中的operator<<

代码语言:javascript
复制
MyErr& operator<< ( MyErr& myErr, std::string message)
{
    cerr << message;
    errorString << message; //Where errorString is a member of the MyErr class

    return myErr;
}

然后,您想要记录错误的位置:

代码语言:javascript
复制
int main()
{
    MyErr myErr;
    myErr << " Something went wrong. ";

    return 0;
}

您可能想让MyErr成为一个单独的类,这样所有写入errorString的东西都可以放在一个地方。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7335445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档