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

标签 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 .我知道这个例子是无用的,尤其是将整数转换为字符串的其他流似乎是无用的,但让我们想象一下,这不是无用的,也不是纯粹的废话。

谢谢。

最佳答案

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

关于C++ 将流操纵器复制到其他流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26716684/

相关文章:

c++ - 检查模板参数是否在同质参数包中出现两次以上

c++ - std::vector、构造函数、对象

c++ - Microsoft Visual C 运行时中未处理的异常

c++ 两个 tbb::parallel_for 循环效率

function - C++ : using class member and static function of same name but different parameters fails

c++ - 将长度为 0 的字符串 ('0' ) 传递给需要 char* 的 STL 函数

c++ - 将指向给定子类的指针从一个 vector 复制到另一个 vector

c++ - 模板替换期间可能会发生隐式转换?

c++ - 将 50 位二进制值转换为整数

c++11 - 对<string,string>的删除赋值运算符的g++编译器错误