我正在围绕std::ofstream
创建一个包装类。我已覆盖所有std::ofstream
方法。现在,我需要覆盖std::endl
方法以使用包装类而不是basic_ostream
。
是否可以覆盖std::endl
方法?谁能举个例子呢?
答案 0 :(得分:3)
首先:永远不允许在::std
命名空间中重载函数。实际上,您仅允许专门化::std
命名空间中的现有模板,并且只有限制。
然而,您可以通过阅读它在C ++ 11 27.7.3.8/1中实际执行的操作来处理endl
情况:
效果:调用os.put(os.widen('\ n')),然后调用os.flush()。
因此,您需要覆盖任何内容,只需提供正确的成员函数来处理put
,widen
和flush
的此序列。
答案 1 :(得分:1)
您可以为operator<<
的类型覆盖std::endl
,然后在重载内部检查您是否通过了std :: endl。但是:我不认为你在做什么是聪明的,虽然不知道你想要实现什么,但很难建议一个更好的方法。我要说你应该描述你的目标,而不是询问如何实现某种(有缺陷的)解决方案。