【问题标题】:Boost program options with default value使用默认值提升程序选项
【发布时间】:2014-03-30 12:02:36
【问题描述】:

我有一个使用 boost program_options 的 c++ 控制台应用程序。

我有一个名为 --list-timezones 的参数

现在我想这样使用它

任何一个

myapp --list-timezones

这给了我所有可用的时区

myapp --list-timezones AT

它只给了我奥地利的时区

我的选项初始化如下

options.add_options()
    ("date-format,d", po::value<string>()->value_name("<Formatstring>")->default_value("%Y-%m-%d %H:%M:%S","\"%Y-%m-%d %H:%M:%S\""),"Format-string for input or output\ne.g. \"%Y-%m-%d %H:%M:%S\"")
    ("input-format,i", po::value<string>()->value_name("<Representation>")->default_value("HEX"),"HEX    hex value\nBIN    binary value\nDEC    decimal value")
    ("output-format,o", po::value<string>()->value_name("<Representation>")->default_value("HEX"),"HEX    hex Value\nBIN    binary value\nDEC    decimal value")
    ("to,t", po::value<string>()->value_name("<Date-Format>"),"CHROME\nMAC\nUNIX\nUNIX_ms\nWin64\nWinCookie\nWinOle\nWinFiletime\nDOS\nHFS\nHFS+")
    ("from,f", po::value<string>()->value_name("<Date-Format>")/*->default_value("UNKNOWN")*/,"CHROME\nMAC\nUNIX\nUNIX_ms\nWin64\nWinCookie\nWinOle\nWinFiletime\nDOS\nHFS\nHFS+\nUNKNOWN")
    ("timezone,z", po::value<string>()->value_name("<Time-Zone>")->default_value("UTC"),"e.g \"Europe/Vienna\"\n execute '--list-timezones ALL' to see all available timezones")
    ("list-timezones,l", po::value<string>()->value_name("<ISO-3166 Country Code>"), "List all available timezones\nyou can filter with ISO3166 country code(e.g AT for Austria)")
    ("value,v", po::value<string>()->value_name("<value>"), "Input Value")
    ("swap-bytes,s", "Swap bytes of result")
    ;

任何想法我可以如何处理?

如果我使用不带参数的 --list-timezones 我会得到一个异常

谢谢 弗洛里安

【问题讨论】:

    标签: c++ exception boost boost-program-options


    【解决方案1】:

    你想要这个:

    ("list-timezones,l", po::value<string>()->implicit_value("")->value_name(...
    

    然后你就可以给出一个论点或不给出一个论点。如果没有给出,则字符串值将为空,这在您的情况下似乎是一个合理的哨兵值。

    【讨论】:

    • 就是这样!非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 2018-01-20
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    相关资源
    最近更新 更多