Если моя командная строка:
> prog --mylist=a,b,c
Можно ли настроить параметры программы Boost для просмотра трех различных значений аргумента для аргумента mylist
? Я настроил program_options как:
namespace po = boost::program_options;
po::options_description opts("blah")
opts.add_options()
("mylist", std::vector<std::string>>()->multitoken, "description");
po::variables_map vm;
po::store(po::parse_command_line(argc, argv, opts), vm);
po::notify(vm);
Когда я проверяю значение аргумента mylist
, я вижу одно значение как a,b,c
. Я хотел бы видеть три разных значения, разделенных запятой. Это отлично работает, если я укажу командную строку как:
> prog --mylist=a b c
or
> prog --mylist=a --mylist=b --mylist=c
Есть ли способ настроить program_options так, чтобы он видел a,b,c
как три значения, каждое из которых должно быть вставлено в вектор, а не одно?
Я использую boost 1.41, g++ 4.5.0 20100520 и включил экспериментальные расширения C++0x.
ИЗМЕНИТЬ:
Принятое решение работает, но в конечном итоге оказывается более сложным, IMO, чем просто повторение вектора и разделение значений вручную. В конце концов, я воспользовался предложением Джеймса Макнеллиса и реализовал его таким образом. Однако его решение не было представлено в качестве ответа, поэтому я принял другое правильное решение от hkaiser. Оба работали, но ручная токенизация понятнее.
boost::tokenizer
для токенизации значений, разделенных запятыми. - person James McNellis   schedule 17.06.2010