Я пытаюсь автоматически напечатать каждую переменную, которая получает входные данные от 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 это работает, и функция вызывается.
Я делаю это потому, что хочу, чтобы выходной поток содержал также входной поток, а затем я мог получить весь контент консоли. Может быть, есть другое решение для этого?
Задача ещё не решена.
Других решений пока нет …