我自己简单写了一个cout,但是在out<<std::endl的时候出错了,要怎么改啊

我自己简单写了一个cout,但是在out<<std::endl的时候出错了,要怎么才能使我的out像cout一样能用endl

template<class _Elem,
    class _Traits> inline
    basic_ostream<_Elem, _Traits>&
        __CLRCALL_OR_CDECL endl(basic_ostream<_Elem, _Traits>& _Ostr)
    {   // insert newline and flush stream
    _Ostr.put(_Ostr.widen('\n'));
    _Ostr.flush();
    return (_Ostr);
    }

这是std里对endl的实现,可以看到它里面有两步 先输出换行符'\n' 然后flush对缓存区进行刷新。其实你可以直接out<'\n';就可以换行
或者你自己的out继承一下ostream,但是这样做可能会有个问题 就是<< 操作符也需要支持重载才行。还有一种方式是你自己写一个endl在你的
out里,用名空间和cout的endl进行区分

/** Thread safe cout class
  * Exemple of use:
  *    PrintThread{} << "Hello world!" << std::endl;
  */
class PrintThread: public std::ostringstream
{
public:
    PrintThread() = default;

    ~PrintThread()
    {
        std::lock_guard<std::mutex> guard(_mutexPrint);
        std::cout << this->str();
    }

private:
    static std::mutex _mutexPrint;
};

std::mutex PrintThread::_mutexPrint{};

https://blog.csdn.net/autumn20080101/article/details/51798677