Pfeil-Operator -> überladen
-
Hallo,
leider bin ich über die Such-Funktion nicht fündig geworden, deshalb stelle ich jetzt folgende Frage.
Ich habe folgende Struktur
struct Test { Test1Ptr ptest1; Test2Ptr ptest2; };dann habe ich Funktionen
void fkt_test1_funktion(...) { Test1Ptr Hans // Zeiger auf die Struktur struct Test ptest; struct Test * ptest = &test; // Test1objekt anlegen ptest->ptest1 = getTest1objekt(); // Werte setzen fkt_setzen_test1(ptest) } void fkt_setzen_test1(struct Test * ptest) { ptest->ptest1->setGroesse(groesse); } ////////////////////////////////////////////////////////////////////////// void fkt_test2_funktion(...) { Test2Ptr Gretl // Zeiger auf die Struktur struct Test ptest; struct Test * ptest = &test; // Test2objekt anlegen ptest->ptest2 = getTest2objekt(); // Werte setzen fkt_setzen_test2(ptest) } void fkt_setzen_test2(struct Test * ptest) { ptest->ptest2->setGroesse(groesse); }wie man erkennt wird sowohl bei Test1 als auch bei Test2 jeweils im Grunde dasgleiche gemacht, deshalb habe ich mir eine Art übergeordnete Funktion vorgestellt. Bei dieser soll der Pfeil-Aufruf überladen werden, so in der Art wie
void fkt_test_funktion(...) { Test1Ptr Hans Test2Prt Gretl // Zeiger auf die Struktur struct Test ptest; struct Test * ptest = &test; // Test1objekt anlegen if (bla) { ptest->ptest1 = getTest1objekt(); // Überladen ptest->ptest_global = ptest->ptest1; } else { ptest->ptest2 = getTest2objekt(); // Überladen ptest->ptest_global = ptest->ptest2; } // Werte setzen fkt_setzen_test(ptest) } // Somit kann man mit einer einzigen Funktion fkt_setzen arbeiten void fkt_setzen_test(struct Test * ptest) { ptest->ptest_global->setGroesse(groesse); }Ist dies so möglich? Ich hoffe ich habe mich gut ausgedrückt und es ist herausgekommen, was ich haben will. Für Tipps und Hinweise hierzu wäre ich sehr dankbar.
Viele Grüße
Andreas
-
Bei deinen Funktionen blicke ich jetzt nicht mehr durch - was hast du vor?
(nebenbei hat das wenig mit op-> zu tun - der kommt eher dann zum Einatz, wenn du Smart-Pointer oder Iteratoren entwickeln willst)
-
Hallo, ich dachte mir schon fast, dass ich mich schlecht ausgedrückt habe;-)
mein Hauptanliegen ist eben, dass ich die Funktionen fkt_setzen_test1 und fkt_setzen_test2 zu einer Funktion fkt_setzen_test zusammenfassen will. Nur arbeitet man einmal mit dem Objekt Test1 und zu anderen mit dem Objekt Test2. Somit würde ich mir sehr viel arbeit sparen, wenn ich nicht für jedes Objekt eine eigene Funktion fkt_setzen_test schreiben muß, sonsdern eine fkt_setzen_test die mit beiden Objekten zurecht kommt, es soll immer nur eines der beiden Objekte angelegt werden und nicht beide gleichzeitig.
-
Wenn Test1 und Test2 von einer gemeinsamen Basisklasse abstammen, könntest du ja diese Basisklasse verwenden, ansonsten eventuell eine Template-Funktion:
template<typename T> void setze_whatever(T* ptr) { ptr->setGroesse(groesse); } ... Test objekt; setze_whatever(object.ptest1); setze_whatever(object.ptest2); ...
-
Hallo CStoll, danke für den Tipp mit der Basisklasse, da hätte ich eigentlich auch gleich draufkommen können.
Gruß
Andreas