我熟悉boost::program_options
(和一般的C ++)。我写了下面的函数,但我不太明白我得到的错误。以下是代码(请注意po
是boost::program_options
的别名)。
int application(po::variables_map& vm)
{
std::cout << &vm << std::endl;
std::cout << vm["infile"];
return SUCCESS;
}
我收到的错误是函数体中的第二行。它写着:"no match for ‘operator<<’ (operand types are ‘std::ostream {aka std::basic_ostream<char>}’ and ‘const boost::program_options::variable_value’)"
我做错了什么?
答案 0 :(得分:0)
std::cout << vm["infile"].as<std::string>() << std::endl;
这仅在您知道基础类型时才有效。它在实现中使用boost::any
和boost::any_cast
。如果上面的示例中的值不是字符串,则会抛出boost::bad_any_cast
异常。
如果只有少数几种可能的类型,则可以链接try / catch或使用typeid找出正确的类型。那当然是超级hacky。 :)