2013-09-26 4 views
16

Gibt es eine Möglichkeit, einen Verweis auf Zeiger in C++ zu "konvertieren"? Im Beispiel unten hat func bereits Prototyp definiert und ich kann es nicht ändern, aber func ist meine API, und ich möchte entweder beide Parameter übergeben, oder eins (und zweiten Satz auf NULL) oder keine (beide auf NULL gesetzt)):konvertieren Verweis auf Zeigerdarstellung in C++

void func2(some1 *p1, some2 *p2); 

func(some1& obj, some2& obj2) 
{ 
    func2(..); 
} 
+5

"&", wie bei nicht-Referenzen. Wie in 'func2 (& obj, & obj2)' – JoshG79

+2

Sie können die Adresse einer Referenz nehmen. Sie erhalten die Adresse des Objekts, auf das verwiesen wird. I.e. Sie können 'func2 (& obj1, NULL)' machen. Beachten Sie, dass es keine Möglichkeit gibt, 'NULL' an' func' zu übergeben; Es gibt keine "NULL" -Referenz. – BoBTFish

+0

@BoBTFish, NULL-Referenzen sind einfach zu erstellen. 'int * pi = 0; int & ri = π '. Natürlich ist das unartig, aber nicht unmöglich und manchmal durch Zufall. – Ben

Antwort

21

func2(&obj, &obj2);

Verwenden Referenzparameter wie normale Variablen.

6

Holen Sie sich einfach die Adresse des Objekts.

some1 *p = &obj; 

Oder in Ihrem Fall:

func2(&obj, &obj2); 
+0

Nun, ich sehe, was Sie versuchen zu tun, aber 'some1 & obj;' ist falsch. Sie können keine Referenz erstellen, die nichts referenziert. – rabensky

+0

Auch dies bezieht sich nicht auf die Adresse der Referenz, sondern auf die Adresse, auf die sie sich bezieht. Verweise haben keine Adressen, da nicht angegeben ist, ob Verweise Speicher benötigen oder nicht. – bstamour

+0

Entschuldigung, das sollte keine Aussage sein. Ich habe nur kopiert, wie die Variable im OP-Code deklariert wurde. –

3
func2(&obj, &obj2); 

ist das, was Sie verwenden sollten.

1

Für eine saubere Design alle in einer Klasse setzen (oder verwenden Sie Namespaces)

class X { 
    private: 
    void func2(someA*, someB*); 

    public: 
    func(someA& a, someB& b) { func2(&a, &b); } 
    func(someA& a) { func2(&a, 0); } 
    func() { func2(0, 0); } 
} 
Verwandte Themen