作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
po::options_description desc("This are the options that are available");
desc.add_options()("help", "print help")(
"deer", po::value<uint32_t>(), "set how many deer you want")(
"rating", po::value<uint32_t>(), "how good ?")(
"name", po::value<std::string>(), "and your name is ... ?");
po::variables_map vm;
po::store(po::parse_command_line(argc, argv, desc), vm);
po::notify(vm);
在接下来的代码部分中,我尝试遍历 vm
for (const auto& it : vm) {
std::cout << it.first.c_str() << " "
<< it.second.as<it.pair::second_type>() << "\n";
}
这里的重点是 vm
包含相同类型的 keys
,但是不同类型的值,在这个例子中我有 uint32_t
与 std::string
混合。
我如何遍历这种容器?我想避免冗长的方法,所以我试图只迭代这个数据结构。
编辑:
我忘记写下来了,但是很明显
namespace po = boost::program_options;
最佳答案
boost variable_map
使用 boost::any
作为值,因此您可以尝试使用 boost::any_cast<T>
找出类型。也许是这样的
for (const auto& it : vm) {
std::cout << it.first.c_str() << " ";
auto& value = it.second.value();
if (auto v = boost::any_cast<uint32_t>(&value))
std::cout << *v;
else if (auto v = boost::any_cast<std::string>(&value))
std::cout << *v;
else
std::cout << "error";
}
关于c++ - Boost 程序选项遍历 variables_map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21008893/
我是一名优秀的程序员,十分优秀!