13

这编译:

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

更新

如果我尝试以下操作:

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
4

2 回答 2

20

这是一个烦人的问题,我们之前也有过一段时间。我们使用以下convert_to_container方法修复它:

Constructor c(boost::assign::list_of(1)(2).convert_to_container<std::vector<int> >() );

在构造函数中使用std::list也有更多问题。请参阅使用 boost 的 list_of 将 std::list 传递给构造函数不会编译以获得适当的答案。

于 2013-07-23T09:08:32.250 回答
0

我正在使用此模板就地制作 std::vector 的临时实例:

#include <vector>
namespace Util {
//init vector
template <typename ELEMENT_TYPE > struct vector_of
    : public std::vector<ELEMENT_TYPE>
{
    vector_of(const ELEMENT_TYPE& t)
    {
        (*this)(t);
    }
    vector_of& operator()(const ELEMENT_TYPE& t)
    {
        this->push_back(t);
        return *this;
    }
};
}//namespace Util

用法如下所示:

Constructor (Util::vector_of<int>(1)(2));

构造函数签名如下所示:

Constructor(const std::vector<int>& value)
{
    _value = value;
}
于 2014-05-09T09:23:39.000 回答