gpt4 book ai didi

c++ - vector 值 boost::program_options 的默认值

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:23:19 24 4
gpt4 key购买 nike

我有一个 boost::program_options 选项,它成功地将所需的输入选项解析为一个 vector ,但我没有看到如何也给它一个默认值。示例:

base.add_options()
("vector_value",po::value<std::vector<double> >(&vecoption)->multitoken(),"description");

可以很好地将值读入 vecoptions 之类的东西

    base.add_options()
("int_value",po::value<int>(&intoption)->default_value(1),"description");

也可以正常工作,但尝试为 vector 参数提供一个默认值,如

base.add_options()
("vector_value",po::value<std::vector<double> >(&vecoption)->default_value(std::vector<double>{0,1,2}),"description");

编译错误

error: static assertion failed: Source type is neither std::ostream`able nor std::wostream`able

如何创建一个带有默认值(如 {0,1,2})的 vector 值浮点选项?

最佳答案

遗漏导致的问题operator<<对于 ostream对于类型 std::vector<double> .此运算符需要提供默认值的文本表示。在boost\program_options\value_semantic.hpp header 你可以找到关于这个要求的评论:

/** Specifies default value, which will be used if none is explicitly specified. The type 'T' should provide operator<< for ostream. */

typed_value* default_value(const T& v)

要解决此问题,您可以指定 operator<<喜欢:

namespace std
{
std::ostream& operator<<(std::ostream &os, const std::vector<double> &vec)
{
for (auto item : vec)
{
os << item << " ";
}
return os;
}
}

Boost 能够解决 operator<<如果它在命名空间 std 中定义.在这种情况下,可以像这样指定默认参数值:

("vector_value", po::value<std::vector<double> >(&vecoption)->multitoken()->default_value(std::vector<double>{0, 1, 2}), "description");  

另一种方法是使用具有显式文本值规范的方法:

("vector_value", po::value<std::vector<double> >(&vecoption)->multitoken()->default_value(std::vector<double>{0, 1, 2}, "0, 1, 2"), "description");

关于c++ - vector 值 boost::program_options 的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40754810/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com