想象一个 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
.我知道这个例子是无用的,尤其是将整数转换为字符串的其他流似乎是无用的,但让我们想象一下,这不是无用的,也不是纯粹的废话。
谢谢。
最佳答案
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();
}
关于C++ 将流操纵器复制到其他流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26716684/