я даю следующий код, чтобы проиллюстрировать мой вопрос:Как я могу определить операторы, чтобы массив пользовательских типов мог быть преобразован в массив примитивных типов?
#include <vector>
struct Complex
{
int a, b, c;
Complex() : a(3), b(4), c(10) {}
operator int() const { return a+b+c; }
};
int main()
{
Complex abc;
int value = (abc);
Complex def;
def.a = 20;
int value2 = (def);
std::vector<Complex> ar;
ar.push_back(abc);
ar.push_back(def);
std::vector<int> ar2;
ar2.push_back(abc);
ar2.push_back(def);
std::vector<int> ar3;
ar3 = (ar);
}
Это не будет компилировать, в связи с выражением ar3 = (ar)
. Я объявил оператор преобразования, так что класс Complex
может использоваться там, где ожидается int
. Могу ли я также заставить его работать для назначения массива объектов Complex
в массив из int
?
Я попытался объявить оператор преобразования, не являющиеся членами для массива Complex
, но это не допускается:
void std::vector<int> operator = (std::vector<Complex> complexArray)
{
std::vector<int> abc;
for(int i=0; i<complexArray.size(); i++)
abc.push_back(complexArray[i]);
return abc;
}
Вам также понадобится 'using std :: begin; используя std :: end; 'если вы хотите, чтобы зависящий от аргумента поиск включал обычные функции. –