c++ - 在 C++ 中处理许多 commnadline 选项

标签 c++ command-line command-line-arguments

我有一个 C++ 程序,其主要功能如下所示:

if(a.size == 2) {
    if(s1) {
        f1(a[0], a[1], "string1");
    }
    else{
        f1(a[0], a[1], "string2");
    }
}
if(a.size == 1) {
    if(s1) {
        f1(a[0], "string1");
    }
    else{
        f1(a[0], "string2");
    }
}
else {
    if(s1) {
        f1("string1");
    }
    else{
        f1("string2");
    }
}
...
...
...
...

其中 as1 是从命令行选项接收的。 它有许多命令行选项和多层 if...else.. 结构,看起来更乱。 有什么改进的方法吗?

最佳答案

代替这个原始代码,

if(a.size == 2) {
    if(s1) {
        f1(a[0], a[1], "string1");
    }
    else{
        f1(a[0], a[1], "string2");
    }
}
if(a.size == 1) {
    if(s1) {
        f1(a[0], "string1");
    }
    else{
        f1(a[0], "string2");
    }
}
else {
    if(s1) {
        f1("string1");
    }
    else{
        f1("string2");
    }
}

假设缺少else,做

auto const s = (s1? "string1" : "string2");
switch( a.size )
{
    case 0: f1( s ); break;
    case 1: f1( a[0], s ); break;
    case 2: f1( a[0], a[1], s ); break;
}

例如。


对于解析命令行参数的一般问题,请查看 getopt 和各种选项解析器,例如在提升中。

关于c++ - 在 C++ 中处理许多 commnadline 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23591609/

相关文章:

c++ - 为什么 make_shared 在单独的调用中分配相同的地址?

c# - 在控制台应用程序中屏蔽密码参数

c++ - NS_ERROR_XPC_GS_RETURNED_FAILURE 错误码

php - 如何使用tor层在本地服务器上运行php脚本?

python - 列表中的目录内容

command-line - PHP 命令行 php.ini 路径错误

command-line-interface - Grunt 文件 : how can I add command line options at runtime?(Grunt 0.3.15+)

c++ - 将 exe 转换为 DLL - 手动调用主函数

c++ - 二进制搜索 - 代码编译和运行后不显示输出

c++ - 如何仅使用参数包在 C++11 中实现 boost MPL FOLD ?