2016-05-23 5 views
1

Ich habe eine Funktion wie so:Die beste Methode zum Überladen einer Funktion basierend auf dem Argumenttyp, der Zeiger | ist Referenz?

void myFunction(MyObject& obj) 
{ 
    //lots of code to operate on obj 
} 

Mein Problem ist, dass manchmal obj ein Zeiger auf eine Instanz des Typs sein MyObject

void myFunction(MyObject* obj) 
{ 
    //... 
} 

Meine Frage ist, wie ich beide Funktion erreichen können Definitionen, während Sie keinen Code wiederholen müssen?

+0

Ich bin mir nicht sicher. Persönlich würde ich mich mit dem einen oder anderen zufrieden geben. Dann übergeben Sie bei Bedarf & rObject oder * pObject. Das hat für mich funktioniert. –

+0

Sie können immer eine Funktion von der anderen anrufen, aber ich glaube nicht, dass Sie wirklich zwei brauchen, kann der Anrufer entweder leicht zur Verfügung stellen. –

Antwort

5

Sie können die Instanz einfach von der Zeigerfunktion weiterleiten.

void myFunction(MyObject* obj) 
{ 
    if (obj != nullptr) // do not want to dereference a null pointer 
     myFunction(*obj); 
} 

Wird die Referenzversion von myFunction nennen so dass Sie nur eine Funktion zu halten.

Dies setzt voraus, dass Sie nur mit dem Wert des Objekts arbeiten müssen, und verwenden Sie einen Zeiger oder Verweis, um nur zu speichern, das Objekt zu kopieren.

+0

Kühl. Ich war mir nicht sicher, dass das kompilieren würde. Aber mein Kommentar deutet etwas Ähnliches an. Aber du hast es besser gemacht. –

+0

Ich würde zuerst nach 'nullptr' suchen, bevor ich zur Referenzversion von' myFunction' weiterleite. – PaulMcKenzie

+0

@PaulMcKenzie Guter Vorschlag. Ich habe den Code überprüft. – NathanOliver