矢量的默认值 boost::program_options
Default value for vector valued boost::program_options
我有一个 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");
也可以正常工作,但尝试为向量参数提供默认值,如
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})的矢量值浮点选项?
由于类型 std::vector<double>
的 ostream
的 operator<<
丢失导致的问题。此运算符需要提供默认值的文本表示。在 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");
我有一个 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");
也可以正常工作,但尝试为向量参数提供默认值,如
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})的矢量值浮点选项?
由于类型 std::vector<double>
的 ostream
的 operator<<
丢失导致的问题。此运算符需要提供默认值的文本表示。在 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");