为什么不能将<< <

问题描述 投票:1回答:1

我使自己熟悉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’)"

我在做什么错?

c++ boost boost-program-options
1个回答
0
投票
std::cout << vm["infile"].as<std::string>() << std::endl;

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

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

© www.soinside.com 2019 - 2024. All rights reserved.