Я хочу скопировать std::vector<int>
в другой std::vector<myStruct>
с оператором присваивания, в котором myStruct
может быть назначен int
. Так что я написал этот кусок кода:автоматическое преобразование между векторами stl
#include <vector>
#include <iostream>
using namespace std;
struct myStruct
{
myStruct(int& a) : _val(a) { }
myStruct(int&& a) : _val(a) { }
myStruct& operator=(int& a)
{
_val = a;
return *this;
}
int _val;
};
int main()
{
vector<int> ivec;
ivec.push_back(1);
vector<myStruct> svec = ivec;
return 0;
}
И это дает мне ошибку, поскольку он не может найти действительное преобразование между std::vector<myStruct>
и std::vector<int>
хотя int
неявно могут быть преобразованы в myStruct
. С другой стороны, присваивать оператор нельзя объявить вне класса, поэтому я выводю, что запись оператора вручную не является вариантом. Так что я должен делать в этой ситуации?
*** UPDATE: Как Blastfurnace
и другие сказали, это может быть решена с помощью этого кода вместо присваивания:
vector<myStruct> svec(ivec.begin(), ivec.end());
Но представьте себе ситуацию, в которой я хочу написать библиотеку и хотите, чтобы справиться с этим в самой библиотеке, так что пользователь может просто написать std::vector<myStruct> svec = someFunction()
, в котором someFunction
возвращает std::vector<int>
. Разве нет решения для этого?
Вы можете использовать 'vector svec (ivec.begin(), ivec.end());' вместо этого. –
Rostislav
@Rostislav: Отправьте это как ответ, я отправил то же самое через несколько секунд после вас. – Blastfurnace
@Blastfurnace Спасибо :) Я также добавил дополнительную информацию. Благодаря! – Rostislav