你可以嘗試用multitoken
和zero_tokens
選項一招:
using namespace std;
namespace po = boost::program_options;
vector<string> replay;
po::options_description desc("Allowed options");
desc.add_options()
("replay,r", po::value< vector<string> >(&replay)->multitoken()->zero_tokens(), "bla bla bla");
po::variables_map vm;
po::store(po::parse_command_line(argc, argv, desc), vm);
po::notify(vm);
if (vm.count("replay"))
{
size_t s = vm["replay"].as< vector<string> >().size();
if (s == 0)
cout << "replay without args" << endl;
else if (s == 1)
cout << "replay with one arg" << endl;
else
cout << "replay with multiple args" << endl;
}
else
cout << "replay not specified" << endl;
然後僅計算replay
向量元素的數量。如果將多個參數傳遞給重播選項,那麼您會想要引發錯誤。
謝謝!完美的作品 – cppalex 2009-11-28 14:08:36
@Vladimir Prus,這裏是另一個關於在這裏沒有值的選項的問題http://stackoverflow.com/questions/7174781/boost-program-options-notifier-for-options-with-no-value 我想能夠爲這些選項添加通告或者編寫補丁來啓用它。請,評論,謝謝。 – Riga 2011-08-26 20:21:05
不幸的是,由於某種原因,當INI文件中給出一個空的值時,這不起作用。 – 2017-02-21 07:13:17