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(..);
}
func2(&obj, &obj2);
Utilisez des paramètres de référence comme des variables normales.
Obtenez simplement l'adresse de l'objet.
some1 *p = &obj;
Ou dans votre cas:
func2(&obj, &obj2);
func2(&obj, &obj2);
est ce que vous devez utiliser.
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));
}
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); }
}