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