是否可以覆盖std :: endl?

时间:2013-05-21 18:35:16

标签: c++

我正在围绕std::ofstream创建一个包装类。我已覆盖所有std::ofstream方法。现在,我需要覆盖std::endl方法以使用包装类而不是basic_ostream

是否可以覆盖std::endl方法?谁能举个例子呢?

2 个答案:

答案 0 :(得分:3)

首先:永远不允许在::std命名空间中重载函数。实际上,您允许专门化::std命名空间中的现有模板,并且只有限制。

然而,您可以通过阅读它在C ++ 11 27.7.3.8/1中实际执行的操作来处理endl情况:

  

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

因此,您需要覆盖任何内容,只需提供正确的成员函数来处理putwidenflush的此序列。

答案 1 :(得分:1)

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