2

我正在围绕std::ofstream. 我已经覆盖了所有std::ofstream方法。现在,我需要重写该std::endl方法以使用包装类而不是basic_ostream.

是否可以覆盖std::endl方法?谁能给我一个例子?

4

2 回答 2

3

第一:永远不允许在::std命名空间中重载函数。事实上,您只能在命名空间中专门化现有模板,::std并且只有在有限制的情况下。

endl但是,您可以通过阅读它在 C++11 27.7.3.8/1 中的实际作用来处理这种情况:

效果:调用 os.put(os.widen('\n')),然后调用 os.flush()。

因此,您无需重写任何内容,只需提供正确的成员函数来处理put,widen和的序列flush

于 2013-05-21T18:43:02.880 回答
1

您可以覆盖operator<<的类型std::endl,然后在重载内部检查您是否通过了 std::endl。然而:我不认为你正在做的事情很聪明,虽然没有真正知道你想要实现什么,很难提出更好的方法。我想说你应该描述你的目标是什么,而不是问如何实现某个(有缺陷的)解决方案。

于 2013-05-21T19:37:00.427 回答