使用函数在cin和ifstream之间切换

时间:2015-03-18 19:05:58

标签: c++ ifstream istream

我试图在标准cin,cout和ifstream,ostream之间切换时操作具有函数的数组。

具体来说,我有一系列书籍,我有一些基本的功能,如搜索标题,出版商,价格等。我还有2个功能称为“登录”和“注销”打开文件和重定向< / em> bookList是登录时对该输出文件的istream和ostream,以及关闭它并在注销时返回istream,ostream。

void bookList(istream& in, ostream& out)
{
    //ask for command from istream in
    //command selection loop
}

int load(ofstream& out, book booklist[], int size)
{
    //load list of books from input file
}

void logon(ofstream& out, string filename)
{
    out.open(filename.c_str());
}

void logoff(ofstream& out, string filename)
{
    out.close();
}
// some other functions

每当调用函数时,我还需要向用户打印通知(在登录时在屏幕上或在登录时在文件上)。

我试图把ifstream&amp;作为每个函数中的参数,但它们只打印到不在屏幕上的文本文件(因为它只是ifstream,而不是istream),但是以其他方式执行它将不起作用。

我的问题是,是否有方法可以使bookList的函数登录重定向istream到输出文件的ifstream,反之亦然?而不是“文件打开”状态。

1 个答案:

答案 0 :(得分:0)

这可能不是您想要的,但可以修改。

/// this buffer will be used to switch output
void IO_Switch(streambuf* buffer);

int main(){
    streambuf *buffer
    ofstream fout;
    fout.open("filename.txt");

    // below you call cout.rdbuf() which directs stream to cout
    IO_Switch(cout.rdbuf());
    cout << "This is coming to the console";
    // below you call fout.rdbuf());
    IO_Switch(fout.rdbuf());
    cout << "I used cout here, but the stream is redirected to fout ("filename.txt")

    return 0;
}

void IO_Switch(streambuf* buffer){
    cout.rdbuf(buffer);
}