我在记录器类中使用ostream时遇到问题。由于某些原因,不会输出std :: endl,因此不添加换行符。我敢肯定有什么问题,我在尝试了解如何在自己的班级中使用我的ostream时遇到问题,因此我可能做了一些根本性的错误。

class MyStreamBuf : public std::streambuf
{
    public:
    MyStreamBuf() : std::streambuf()
    {

    }
};

class MyLogger : public std::ostream
{
public:
    MyLogger(MyStreamBuf* buf) : std::ostream(buf) { mBuf = buf; }
    ~MyLogger() { delete mBuf; }

    template <typename T>
    inline MyLogger& operator << (T const& value)
    {
#ifdef _WIN32 || _WIN64
        std::cout << value;
#endif

        return *this;
    }

    inline std::ostream& operator << (std::ostream& (*f)(std::ostream&))
    {

        return f(*this);
    }

    MyStreamBuf* mBuf;
};



int _tmain(int argc, _TCHAR* argv[])
{
    MyStreamBuf* buf = new MyStreamBuf();
    MyLogger logger(buf);
    logger << "kekekek" << "asdf: " << 23 << std::endl;
    logger << "kekekek" << "asdf: " << 23 << std::endl;;

    getchar();
    return 0;
}


输出:

kekekekasdf: 23kekekekasdf: 23

最佳答案

尝试这个:

inline std::ostream& operator << (std::ostream& (*f)(std::ostream&))
{
        std::cout << f;
        return *this;
}

关于c++ - C++-在我自己的类中使用ostream,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9402477/

10-12 16:01