为什么我不能使用<<运算符与从variables_map中提取的值?

时间:2013-05-18 18:21:07

标签: c++ boost boost-program-options

我熟悉boost::program_options(和一般的C ++)。我写了下面的函数,但我不太明白我得到的错误。以下是代码(请注意poboost::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’)"

我做错了什么?

1 个答案:

答案 0 :(得分:0)

std::cout << vm["infile"].as<std::string>() << std::endl;

这仅在您知道基础类型时才有效。它在实现中使用boost::anyboost::any_cast。如果上面的示例中的值不是字符串,则会抛出boost::bad_any_cast异常。

如果只有少数几种可能的类型,则可以链接try / catch或使用typeid找出正确的类型。那当然是超级hacky。 :)