#c #boost
#c #boost
Вопрос:
#include <boost/program_options.hpp>
namespace bpo = boost::program_options;
int main(int argc, char* argv[])
{
int apple_num = 0, orange_num = 0;
std::vector<std::string> addr;
bpo::options_description opt("all options");
opt.add_options()
("apple,a", bpo::value<int>(amp;apple_num)->default_value(10), "apple count")
("orange,o", bpo::value<int>(amp;orange_num)->default_value(20), "orange count")
("help", "apple orange=");
bpo::variables_map vm;
try {
bpo::store(parse_command_line(argc, argv, opt), vm);
}
catch (...) {
std::cout << "errorn";
return 0;
}
bpo::notify(vm);
if (vm.count("help")) {
std::cout << opt << std::endl;
return 0;
}
std::cout << "apple count:" << apple_num << std::endl;
std::cout << "orange count:" << orange_num << std::endl;
std::cout << "sum:" << orange_num apple_num << std::endl;
return 0;
}
Это работает для полного имени команды как —apple или —orange
D:testForTestDebug> .ForTest.exe --apple=100 --orange=99
apple count:100
orange count:99
sum:199
Но это не удается для —a или -a для упрощенного —apple, я уже добавил как полное, так и упрощенное имя команды «apple,a».
PS D:testForTestDebug> .ForTest.exe -a=99
error
PS D:testForTestDebug>
Почему?
Ответ №1:
Выбранный стиль командной строки не ожидает знака равенства с короткими параметрами:
./sotest -a=99
error
Но
./sotest -a 99
apple count:99
orange count:20
sum:119
Чтобы исправить ожидания:
auto style = bpo::command_line_style::default_style
| bpo::command_line_style::allow_long_disguise
;
bpo::store(parse_command_line(argc, argv, opt, style), vm);
Теперь вы получаете
./sotest -a 7
apple count:7
orange count:20
sum:27
./sotest -a8
apple count:8
orange count:20
sum:28
./sotest -a=9
apple count:9
orange count:20
sum:29
./sotest --apple=100 --orange=31
apple count:100
orange count:31
sum:131
Комментарии:
1. Так здорово! Спасибо!