1

我正在熟悉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’)"

我究竟做错了什么?

4

1 回答 1

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

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

如果只有少数可能的类型,您可以链接 try/catch 或使用 typeid 来发现正确的类型是什么。那当然是超级hacky。:)

于 2020-02-08T19:31:09.577 回答