如何在使用后使用 boost program_options 到 consume/remove ARGV 中的选项
How to use boost program_options to consume/remove an option in ARGV after usage
目前,我们的代码库在我们的测试框架中使用 boost program_options 作为命令行解析器。我想在我们的命令行解析中实现一种 "consume-after-use" 类型的规则。
我说的"consume-after-use"是什么意思,举个例子。使用 --option1 后,我可以在 ARGC、ARGV 中删除 --option1。这样做的主要原因是我想在使用我只关心的选项后在另一个解析器中传递 ARGC 和 ARGV。
在 boost program_option 中这可能吗?
如您所见,here boost::program_options::variables_map
继承自 std::map,因此您可以对其调用 std::map:erase
:
namespace po = boost::program_options;
po::variables_map vm;
po::store(po::parse_command_line(ac, av, desc), vm);
po::notify(vm);
if (vm.count("option1")) {
// handle option1
...
// erase option1
vm.erase("option1");
if (vm.count("option1")) {
// never gonna happen
}
}
目前,我们的代码库在我们的测试框架中使用 boost program_options 作为命令行解析器。我想在我们的命令行解析中实现一种 "consume-after-use" 类型的规则。
我说的"consume-after-use"是什么意思,举个例子。使用 --option1 后,我可以在 ARGC、ARGV 中删除 --option1。这样做的主要原因是我想在使用我只关心的选项后在另一个解析器中传递 ARGC 和 ARGV。
在 boost program_option 中这可能吗?
如您所见,here boost::program_options::variables_map
继承自 std::map,因此您可以对其调用 std::map:erase
:
namespace po = boost::program_options;
po::variables_map vm;
po::store(po::parse_command_line(ac, av, desc), vm);
po::notify(vm);
if (vm.count("option1")) {
// handle option1
...
// erase option1
vm.erase("option1");
if (vm.count("option1")) {
// never gonna happen
}
}