web-dev-qa-db-fra.com

convertir la référence en représentation de pointeur en C ++

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

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

func(some1& obj, some2& obj2)
{
   func2(..);
}
24
Mark

func2(&obj, &obj2);

Utilisez des paramètres de référence comme des variables normales.

30
Chen

Obtenez simplement l'adresse de l'objet.

some1 *p = &obj;

Ou dans votre cas:

func2(&obj, &obj2);
9
Jonathan Wood
 func2(&obj, &obj2);

est ce que vous devez utiliser.

3
Umer Farooq

Dans des cas normaux, vous pouvez simplement utiliser &:

void func(some1& obj, some2& obj2)
{
    func2(&obj, &obj2);
}

mais operator& peut être surchargé, donc std::addressof (depuis C++ 11) devrait être utilisé pour ces cas:

void func(some1& obj, some2& obj2)
{
    func2(std::addressof(obj), std::addressof(obj2));
}
2
Jarod42

Pour un design épuré, mettez tout dans une classe (ou utilisez des espaces de noms)

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); }
}
1
user2249683