重载运算符
重载运算符时
要解决这个问题,有必要了解 std::endl 不是一个对象,而是一个函数。为了适应这一点,std::cout 有自己的运算符
要使自定义流能够处理 std::endl,需要类似的方法。下面是演示这一点的示例代码:
#include <iostream> struct MyStream { template <typename T> MyStream& operator<<(const T& x) { std::cout << x; return *this; } // Function that takes a custom stream and returns it typedef MyStream& (*MyStreamManipulator)(MyStream&); // Overload to accept functions with custom signature MyStream& operator<<(MyStreamManipulator manip) { return manip(*this); } // Custom `endl` implementation for this stream static MyStream& endl(MyStream& stream) { std::cout << std::endl; stream << "Called MyStream::endl!" << std::endl; return stream; } // Type of std::cout typedef std::basic_ostream<char, std::char_traits<char>> CoutType; // Function signature of std::endl typedef CoutType& (*StandardEndLine)(CoutType&); // Overload to accept std::endl MyStream& operator<<(StandardEndLine manip) { manip(std::cout); return *this; } }; int main() { MyStream stream; stream << 10 << " faces." << MyStream::endl << std::endl; return 0; }
在此代码中,我们有:
此方法允许自定义流(如示例中的 MyStream)支持 std::endl 并在使用时提供自定义行为。
以上是重载`时如何处理`std::endl`的详细内容。更多信息请关注PHP中文网其他相关文章!