2013-09-26 17 views
16

Czy istnieje sposób "przekonwertować" odwołanie do wskaźnika w C++? W poniższym przykładzie func ma już zdefiniowany prototyp i nie mogę go zmienić, ale func jest moim API i chciałbym przekazać oba parametry lub jeden (i drugi zestaw do NULL) lub żaden (oba ustawione na NULL)przekonwertować odwołanie do reprezentacji wskaźnika w C++

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

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

„&”, tak samo jak dla niezarejestrowanych referencje. Jak w 'func2 (& obj, & obj2)' – JoshG79

+2

Możesz wziąć adres odniesienia. Daje ci adres przywołanego obiektu. To znaczy. możesz zrobić 'func2 (& obj1, NULL)'. Zauważ, że nie ma sposobu na przekazanie 'NULL' do' func'; nie ma czegoś takiego jak referencja "NULL". – BoBTFish

+0

@BoBTFish, odniesienia NULL są łatwe do utworzenia. 'int * pi = 0; int & ri = π '. Oczywiście, że jest to niegrzeczne, ale nie niemożliwe, a czasami robione przez przypadek. – Ben

Odpowiedz

21

func2(&obj, &obj2);

parametrami eksploatacyjnymi referencyjne, takie jak zwykłe zmienne.

6

Po prostu uzyskaj adres obiektu.

some1 *p = &obj; 

lub w przypadku:

func2(&obj, &obj2); 
+0

Cóż, widzę, co próbujesz zrobić, ale 'some1 & obj;' jest błędne. Nie można utworzyć odwołania, które nie odwołuje się do niczego. – rabensky

+0

Nie zajmuje to również adresu odniesienia, ale adres tego, do czego się odnosi. Referencje nie mają adresów, ponieważ nie jest określone, czy odwołania wymagają przechowywania. – bstamour

+0

Przepraszam, to nie miało być oświadczenie. Właśnie skopiowałem sposób, w jaki zmienna została zadeklarowana w kodzie OP. –

3
func2(&obj, &obj2); 

co należy używać.

1

Dla czystej konstrukcji umieścić wszystkie w klasie (lub użyć nazw)

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); } 
} 
Powiązane problemy