C++ 实施C++;操作员<&书信电报;对于复合类型

C++ 实施C++;操作员<&书信电报;对于复合类型,c++,io,operator-overloading,iostream,C++,Io,Operator Overloading,Iostream,operatoriostreams并不是以快速高效著称的。构建一个中间std::ostringstream,然后将最终结果作为一个单一的字符集转储,不会使现有的情况比现在更糟。如果复杂对象一直被打印,也许可以将复杂对象的文本实现缓存为它的std::string成员之一,并根据需要生成它。一个可以查看的地方是std::complex的实现。啊哈,我想您的字符串流解决方案对于libc++:(编辑:和libstdc++:)为了澄清,我的意思是“复杂”是“比简单更复杂”,与std::Complex的意思

operatoriostreams并不是以快速高效著称的。构建一个中间
std::ostringstream
,然后将最终结果作为一个单一的字符集转储,不会使现有的情况比现在更糟。如果复杂对象一直被打印,也许可以将复杂对象的文本实现缓存为它的
std::string
成员之一,并根据需要生成它。一个可以查看的地方是
std::complex
的实现。啊哈,我想您的字符串流解决方案对于libc++:(编辑:和libstdc++:)为了澄清,我的意思是“复杂”是“比简单更复杂”,与
std::Complex
的意思不同。但这仍然是一个有趣的比较。
friend std::ostream& operator<<(std::ostream& str, Simple const& s)
{
    return str << s.value;
}
friend std::ostream& operator<<(std::ostream& str, Complex const& c)
{
    return str << s.a << ':' << s.b;
}
friend std::ostream& operator<<(std::ostream& str, Complex const& c)
{
    std::ostringstream s;
    s << c.a << ':' << c.b;
    return str << s.str();
}