gebe ich den folgenden Code, meine Frage zu veranschaulichen:Wie kann ich Operatoren definieren, so dass ein Array von benutzerdefinierten Typen in ein Array von primitiven Typen umgewandelt werden kann?
#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);
}
Dies wird nicht kompilieren, die aufgrund der Expression ar3 = (ar)
. Ich habe einen Konvertierungsoperator deklariert, so dass die Complex
Klasse verwendet werden kann, in der int
erwartet wird. Kann ich es auch so einrichten, dass ein Array von Complex
Objekten einem Array von int
zugewiesen wird?
Ich versuchte, ein nicht-Mitglied Umwandlungsoperator für Array von Complex
zu erklären, aber das ist nicht erlaubt:
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;
}
Sie benötigen auch 'using std :: begin; Verwenden Sie std :: end; ', wenn die argumentabhängige Suche die üblichen Funktionen enthalten soll. –