向量赋值boost :: program_options的默认值

问题描述:

我有一个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}这样的默认值的矢量值浮动选项?

+0

无关,但你并不需要显式提供模板参数'婆:: value'。只需'po :: value(&intoption)'和'po :: value(&vecoption)'就可以了。这是一个函数模板。 – Barry

对于std::vector<double>类型错过operator<<ostream造成的问题。该操作员需要提供您的默认值的文本表示。在boost\program_options\value_semantic.hpp头,你可以找到有关此规定的评论:

/** 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; 
    } 
} 

加速能够解决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"); 
+0

我已经为(size_t i = 0; i &vec){ ){ os Aurelius

+0

划伤上述评论的第二部分;用上面的文本表示法工作 - > default_value(...) - > multitoken()。如果你可以编辑你的答案来显示ostream'able版本,我会很乐意接受它。 – Aurelius

+0

@Aurelius对,我刚刚在上面的代码行中添加了错过的' - > multitoken()'说明符。 – Nikita