处理c++中的许多命令行选项



我有一个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和各种选项解析器,例如在Boost.

最新更新