C ++复制流操纵器到其他流

时间:2014-11-03 14:51:00

标签: c++ c++11 stl stream

想象一下std::ostream& operator<<希望用数字做一些事情。为此,有人可能想要使用std::hex,其他人可能想要使用无,无论如何,任何操纵器都是可能的。

如果没有std::ostream的文本内容作为参数传递,我怎么能将这些复制到另一个ostream?我只需要操纵器

所以我想要std::cout << std::hex << someCoolClass(10),其中someCoolClass看起来像

struct someCoolClass
{
    someCoolClass(int i) : _i(i)
    {}

    friend std::ostream& operator<<(std::ostream& os, const someCoolClass& rhs)
    {
        std::stringstream ss;
        //magically copy manipulators of os
        ss << _i;
        return os << ss.str();
    }
private:
    int _i;
};

打印a。我知道这个例子是无用的,特别是将整数转换为字符串的其他流似乎没用,但让我们想象一下,这不是无用的,也不是纯粹的非法。

感谢。

1 个答案:

答案 0 :(得分:7)

ios::copyfmt

friend std::ostream& operator<<(std::ostream& os, const someCoolClass& rhs)
{
    std::stringstream ss;
    ss.copyfmt(os);        // <- copy formatting
    ss << rhs._i;
    return os << ss.str();
}

DEMO