c – 使用boost :: assign :: list_of

前端之家收集整理的这篇文章主要介绍了c – 使用boost :: assign :: list_of前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这编译:
std::vector<int> value = boost::assign::list_of(1)(2);

但不是这样的:

Constructor(std::vector<int> value)
{
}

Constructor (boost::assign::list_of(1)(2));

是否有一个单行解决方案来初始化传递给构造函数的向量?

更好的是,如果构造函数通过引用引用来复制到类变量:

Constructor(std::vector<int>& value)
{
    _value = value;
}

UPDATE

如果我尝试以下:

enum Foo
{
    FOO_ONE,FOO_TWO 
};

class Constructor
{
public:
    Constructor(const std::vector<Foo>& value){}
};

Constructor c(std::vector<Foo>(boost::assign::list_of(FOO_ONE)));

我得到编译器错误

error C2440: '<function-style-cast>' : cannot convert from 'boost::assign_detail::generic_list<T>' to 'std::vector<_Ty>'
1>          with
1>          [
1>              T=Foo
1>          ]
1>          and
1>          [
1>              _Ty=Foo
1>          ]
1>          No constructor could take the source type,or constructor overload resolution was ambiguous

解决方法

这是一个令人讨厌的问题,我们也有一段时间.我们使用convert_to_container方法修复它:
Constructor c(boost::assign::list_of(1)(2).convert_to_container<std::vector<int> >() );

std :: list在构造函数中也有更多的问题.请参阅Pass std::list to constructor using boost’s list_of doesn’t compile的相应答案.

猜你在找的C&C++相关文章