想象一个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