这编译:
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的相应答案.