我使自己熟悉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’)"
我在做什么错?
std::cout << vm["infile"].as<std::string>() << std::endl;
这仅在您知道基础类型时才有效。它在实现中使用boost::any
和boost::any_cast
。如果在上面的示例中该值不是字符串,它将抛出boost::bad_any_cast
异常。
如果可能的类型很少,则可以链接try / catch或使用typeid找出正确的类型。那当然是超级hacky。 :)