自定义流实现中的运算符重载和处理 std::endl
考虑以下代码片段,其中运算符
template <typename T> UIStream& operator<< (const T); UIStream my_stream; my_stream << 10 << " heads";
虽然这按预期工作,但尝试使用 my_stream
要解决此问题,重要的是要了解 std::endl 不是对象而是函数。在 std::cout 中,它是通过实现运算符
运算符的自定义实现
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&); // Accept function with custom signature MyStream& operator<< (MyStreamManipulator manip) { return manip(*this); } // Define a custom endl for this stream (matches MyStreamManipulator signature) static MyStream& endl(MyStream& stream) { std::cout << std::endl; stream << "Called MyStream::endl!" << std::endl; return stream; } };
此自定义实现定义了一个运算符
这允许实现自定义 endl 函数在自定义流上运行。
以上是如何处理自定义流运算符重载中的'std::endl”?的详细内容。更多信息请关注PHP中文网其他相关文章!