【发布时间】:2014-01-05 00:06:48
【问题描述】:
我想实现一个字符串流对象,它代表某个类型的字符串流。
例如,
class ohtmlstringstream : public std::ostringstream {
};
ohtmlstringstream& operator <<(ohtmlstringstream& ohss, double d) {
ohss << "<div title='double'>" << d << "</div>";
return ohss;
}
遗憾的是,这不起作用,并且我创建的任何 ohtmlstringstream 对象,我将 << 加倍放入只是运行 std::ostream& operator <<(std::ostream&, double)。
这样做的方法是什么?看起来我不应该继承 ostringstream。
我真的只是想要一种干净简单的方法来“分叉”特定类型的序列化方式。很长一段时间以来,我只想以一种方式序列化一个类型,但现在我想为我的类型构建至少 3 种情况的字符串表示:在 HTML(或 XML)表示中,在 JSON 中,在我已经这样做了,这是调试时转储到终端的基本方法。
【问题讨论】:
-
我很确定你不能从标准类继承,除了异常类。
-
@user2345215 是的,那我该怎么办?我应该做一些stringbuf inheriting 吗?或者我可以让我的类包含它自己的字符串流吗?
-
Works for me。问题一定出在你没有显示的代码上。
-
@IgorTandetnik 但这不是:ideone.com/iXnRmM 问题是它不像我预期的那样工作
-
当然。这是
operator<<(operator<<(ostream, const char*), double)。内部调用返回ostream&,而不是ohtmlstringstream&