自动cout每个cin

时间:2017-03-07 20:21:54

标签: c++ cin cout istream filebuf

我正在尝试自动打印从cin获取输入的每个变量。

class MyFileBuf : public std::filebuf
{
protected:
    virtual std::streamsize xsgetn (char* p, streamsize n)
    {
        std::streamsize ret = std::filebuf::xsgetn( p, n );
        cout << p;
        return ret;
    };
};


class MyFileStream : public std::istream
{
public:
    MyFileStream() : std::istream( 0 ) { init( &buf_ ); };
    MyFileStream( const char* filename, std::ios_base::openmode mode = std::ios_base::in )
    : std::istream( 0 )
    {
        init( &buf_ );
        this->open( filename, mode );
    }

    bool is_open() const { return buf_.is_open(); };

    void close() { buf_.close(); };

    void open( const char* filename, std::ios_base::openmode mode = std::ios_base::in )
    {
        buf_.open( filename, mode );
    };

    std::filebuf* rdbuf() { return &buf_; };

private:
    MyFileBuf buf_;
};

这是我的溪流课程。比我试图将cin缓冲区设置为MyFileStream缓冲区,但问题是xsgetn函数甚至没有调用一次。 我该如何解决?如果我尝试对输出流做同样的事情,使用xsputn它可以工作并调用该函数。

我这样做是因为我希望输出流也包含输入流,而且我可以获得整个控制台内容。也许有另一种解决方案吗?

0 个答案:

没有答案