C++ 是否可以覆盖std::endl?

C++ 是否可以覆盖std::endl?,c++,C++,我正在围绕std::of Stream创建一个包装器类。我已经覆盖了所有std::ofstream方法。现在,我需要重写std::endl方法以使用包装器类而不是基本的_ostream 可以重写std::endl方法吗?有人能给我举个例子吗?首先:永远不允许在::std名称空间中重载函数。事实上,只允许专门化::std名称空间中的现有模板,并且只允许有限制 但是,您可以通过阅读C++11 27.7.3.8/1中的实际操作来处理endl情况: 效果:调用os.putos.加宽'\n',然后调用os

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


可以重写std::endl方法吗?有人能给我举个例子吗?

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

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

效果:调用os.putos.加宽'\n',然后调用os.flush


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

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

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

效果:调用os.putos.加宽'\n',然后调用os.flush


因此,您不需要重写任何内容,只需提供正确的成员函数来处理put、加宽和flush的顺序。

您可以重写运算符您可以重写运算符,或者没有类来重写它。endl是一个自由函数。看看这个问题:std::ofstream几乎没有任何虚拟函数,所以没有太多可重写的。从std::of Stream派生通常不是实现扩展功能的好方法。为什么std::endl不能与您的新类is一起工作?如果你想做一些不同的事情,为什么不写一个新函数呢。你想实现什么?没有类可以覆盖它。endl是一个自由函数。看看这个问题:std::ofstream几乎没有任何虚拟函数,所以没有太多可重写的。从std::of Stream派生通常不是实现扩展功能的好方法。为什么std::endl不能与您的新类is一起工作?如果你想做一些不同的事情,为什么不写一个新函数呢。你想实现什么?在std::basic_ostream或它的基中,put、extended或flush都不是虚拟的,因为endl是在字符类型而不是流类型上模板化的,所以在从std::ostream派生的类中提供这些函数的版本是毫无意义的。我假设OP是对stream的包装并继承streambuf,因为他声称已经成功地覆盖了ofstream方法。在std::basic_ostream或其基中,put、加宽或flush都不是虚拟的,因为endl是在字符类型而不是流类型上模板化的,在从std::ostream派生的类中提供这些函数的版本是毫无意义的。我假设OP是包装了ofstream并继承了streambuf,因为他声明已经成功地重写了ofstream方法。