对于C ++,如何接受CLI参数或 stdin?
例如,让我说我有一个函数foo()
,我想调用可变数量的参数。对于标准args,我只使用类似的东西:
int main(int argc, char* argv[]) {
if (argc < 2) {
std::cout << "usage goes here.\n";
} else {
for (int i; i < argc; ++i) {
foo(argv[i]);
}
}
}
但是如果他们通过stdin将它们发送给我并将参数传送到我的应用程序呢?有没有办法检测和接受/处理两者?在现代C ++(C ++ 11及更高版本)中实现这一目标的有效设计模式是什么?
我对设计模式/示例实现感兴趣。随意引用一个执行此操作的库(Boost?),但请分享/解释一个示例实现。
答案 0 :(得分:2)
通常你只能从stdin读取输入,而不是参数/选项。通过读取和评估参数/选项,程序应该决定它是否期望来自stdin的输入或者例如文件参数。
<强>概要强>
grep [OPTIONS] PATTERN [FILE ...]
<强>描述强>
grep搜索指定的输入文件(如果没有文件被命名,或者如果给出单个连字符 - ( - )作为文件名,则搜索标准输入)包含与给定PATTERN匹配的行。
缺少FILE参数或 - 选项表示 grep 读取标准输入。
您的程序的调用可能如下所示,缺少file参数表示从stdin读取输入:
# file argument, input is in the file
command -o someoption filename
# file content supplied via stdin
command -o someoption < filename
# with pipe and - (stdin) as file argument
othercommand | command -o someoption -
对于解析选项/参数,boost有program options library