我使用boost program_options在c ++中有一个控制台应用程序。
我有一个名为--list-timezones
的参数现在我想像那样使用它
myapp --list-timezones
给了我所有可用的timzones
或
myapp --list-timezones AT
给了我奥地利的时区
我的选项inializitation如下
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,我会得到一个例外
由于 弗洛里安
答案 0 :(得分:3)
你想要这个:
("list-timezones,l", po::value<string>()->implicit_value("")->value_name(...
那么你将能够提出一个论点。如果没有给出,则字符串值将为空,这在您的情况下似乎是一个合理的哨兵值。