2013-09-26 3 views
16

Existe-t-il un moyen de "convertir" une référence en pointeur en C++? Dans l'exemple ci-dessous, func a déjà défini le prototype et je ne peux pas le changer, mais func est mon API, et je voudrais passer les deux paramètres, ou un (et deuxième ensemble à NULL) ou aucun (tous les deux mis à NULL):convertir la référence à la représentation du pointeur en C++

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

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

"&", même que pour les références non. Comme dans 'func2 (& obj, & obj2)' – JoshG79

+2

Vous pouvez prendre l'adresse d'une référence. Il vous donne l'adresse de l'objet référencé. C'est à dire. vous pouvez faire 'func2 (& obj1, NULL)'. Notez qu'il n'y a aucun moyen de passer 'NULL' à' func'; il n'y a pas de référence 'NULL'. – BoBTFish

+0

@BoBTFish, les références NULL sont faciles à créer. 'int * pi = 0; int & ri = π '. Bien sûr, c'est vilain, mais pas impossible et parfois fait par accident. – Ben

Répondre

21

func2(&obj, &obj2);

paramètres de référence d'utilisation comme variables normales.

6

Il suffit d'obtenir l'adresse de l'objet.

some1 *p = &obj; 

Ou dans votre cas:

func2(&obj, &obj2); 
+0

Eh bien, je vois ce que vous essayez de faire, mais 'some1 & obj;' est faux. Vous ne pouvez pas créer une référence qui ne fait référence à rien. – rabensky

+0

Aussi, cela ne prend pas l'adresse de la référence, mais l'adresse de ce à quoi il se réfère. Les références n'ont pas d'adresse car il n'est pas spécifié si les références nécessitent ou non un stockage. – bstamour

+0

Désolé, ce n'était pas censé être une déclaration. Je viens de copier comment la variable a été déclarée dans le code OP. –

3
func2(&obj, &obj2); 

est ce que vous devriez utiliser.

1

Pour un design épuré mettre tous dans une classe (ou espaces de noms d'utilisation)

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); } 
} 
Questions connexes