是否可以重写std::endl

Is it possible to override std::endl?

本文关键字:endl std 重写 是否      更新时间:2023-10-16

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

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

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

然而,你可以通过阅读c++ 11 27.7.3.8/1: 中endl的实际作用来处理它的情况。

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

因此,您不需要重写任何内容,只需提供正确的成员函数来处理put, widenflush的序列。

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