将C++流操作符从一个流复制到另一个流

4

想象一下一个std::ostream& operator<<想要对数字进行某些操作。为此,有人可能想使用std::hex,其他人可能想使用none,无论如何,任何操纵器都是可能的。

我该如何将它们复制到另一个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个回答

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接