向量值boost :: program_options的默认值

Default value for vector valued boost::program_options

本文关键字:options 默认值 program boost 向量      更新时间:2023-10-16

我有一个boost :: program_options选项,该选项成功地将所需的输入选项解析到向量中,但是我看不到如何给它给它一个默认值。示例:

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");

给出编译器错误

错误:静态断言失败:源类型既不是std :: ostream`.也不是std :: wostream`.

如何创建一个带有默认值(例如{0,1,2}?

)的矢量值浮点选项

问题由ostream丢失的CC_2引起的问题。该操作员需要提供默认值的文本表示。在boostprogram_optionsvalue_semantic.hpp标题中,您可以找到有关此要求的评论:

/**指定默认值,如果没有明确指定,则将使用该值。类型'T'应提供操作员&lt;&lt;对于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在命名空间std中定义的operator<<可以解析CC_7。在这种情况下,默认参数值可以指定为:

("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");