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

C++ copy stream manipulator to other stream

本文关键字:其他 复制 操纵 C++      更新时间:2023-10-16

想象一个std::ostream& operator<<想要用数字做一些事情。为此,有些人可能想使用std::hex,有些人则可能不想使用,不管怎样,任何操纵器都是可能的。

如果没有作为参数传递的ostream的文本内容,我如何将它们复制到另一个std::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;
};

打印CCD_ 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