加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

“cin”和“File”的C通用接口

发布时间:2020-12-16 10:40:06 所属栏目:百科 来源:网络整理
导读:cin和文件输入是否有通用接口? 我想制作一个具有可选参数的程序 prog [input-file] 如果指定了输入文件,那么它应该从文件中读取,如果没有,则应该从cin读取. 据我所知,他们都实现了istream.你将如何设置它以便我可以在中执行某些操作var,其中in是一个istream
cin和文件输入是否有通用接口?

我想制作一个具有可选参数的程序

prog [input-file]

如果指定了输入文件,那么它应该从文件中读取,如果没有,则应该从cin读取.

据我所知,他们都实现了istream.你将如何设置它以便我可以在>>中执行某些操作var,其中in是一个istream.

解决方法

#include <iostream>
#include <fstream>

int main(int argc,char **argv)
{
    std::ifstream f;
    if (argc >= 2) {
        f.open(argv[1]);
    }
    std::istream &in = (argc >= 2) ? f : std::cin;

    // use in here
}

您可以将这项工作中的一部分转移到帮助程序类中,以使其更清晰(请注意,在无法打开文件的情况下,这种行为略有不同):

#include <iostream>
#include <fstream>

class ifstream_or_cin_t {
    std::ifstream f;

public:
    ifstream_or_cin_t(const char *filename)
    {
        if (filename) {
            f.open(filename);
        }
    }

    operator std::istream &() { return f.is_open() ? f : std::cin; }
};

static void do_input(std::istream &in)
{
    // use in...
}

int main(int argc,char **argv)
{
    do_input(
        ifstream_or_cin_t((argc >= 2) ? argv[1] : NULL));
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读