Использование 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;
}

ОБНОВЛЕНИЕ

Если я попробую следующее:

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

person Baz    schedule 08.11.2012    source источник
comment
Можете ли вы дать сообщение об ошибке компилятора?   -  person Kevin MOLCARD    schedule 08.11.2012
comment
@Kevin MOLCARD Добавлена ​​ошибка компилятора   -  person Baz    schedule 08.11.2012
comment
Похоже, это ошибка.   -  person Jesse Good    schedule 08.11.2012
comment
ты пробовал Constructor c(boost::assign::list_of<std::vector<Foo>>(FOO_ONE));   -  person mark    schedule 08.11.2012


Ответы (2)


Это досадная проблема, у нас тоже была некоторое время назад. Мы исправили это с помощью метода convert_to_container:

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

Есть и другие проблемы с использованием std::list в конструкторе. См. Передать std::list в конструктор с помощью boost list_of не не компилируется для соответствующего ответа.

person Sven    schedule 23.07.2013
comment
Вы узнали, почему необходимо вызывать функцию conver_to_container? - person Giuseppe Pes; 11.03.2016
comment
Работает отлично! - person Damian; 17.01.2019

Я использую этот шаблон для создания временного экземпляра 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;
}
person user2995769    schedule 09.05.2014