2017-09-21 71 views
1

对于C++,如何接受CLI参数 stdin?接受stdin或CLI参数的设计模式

例如,假设我有一个函数foo(),我想通过可变数量的参数调用函数。对于标准的指定参数时,我只是使用类似:

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?),但请分享/解释一个示例实现。

回答

2

通常情况下,您只能从标准输入读取输入,而不是参数/选项。通过读取和评估参数/选项,程序应该决定它是否期望从标准输入或例​​如一个文件参数。

作为例子从manpage of grep

梗概

的grep [OPTIONS] PATTERN [FILE ...]

说明

grep的搜索名为输入文件(或标准输入,如果没有文件被命名,或者如果单个连字符减号( - )被赋予作为文件名)用于包含与给定PATTERN的匹配的行。

缺少FILE参数或 - 选项表示grep读取标准输入。

你的程序看起来是这样的Invokation,缺少文件参数的指示读取输入从标准输入:

# 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 - 

为了解析选项/参数提高具有program options library

+1

我试图upvoting但我太新。标记为已接受。谢谢。 –