2014-07-01 14 views
5

mam odniesienie ref:Jak wywołać metodę wirtualną bez efektu polimorficznego?

Foo &ref = .. 

chciałbym wywołać metodę ref.say() który jest zdefiniowany jako wirtualny w Foo i wiem, że na pewno jest to nadpisane w klasach potomnych (bo pisałem je również).

Jednak chciałbym nazwać say tak, jakby był nie polimorficzny, więc wersja, która jest zdefiniowana w Foo, a nie w klasach dla dzieci.

Jak to zrobić?

Jedną rzeczą, która przychodzi mi do głowy, jest przyjmowanie wskaźnika ref, niż dereferencja i ta sztuczka powinna zabić polimorfizm, ale nie jestem pewien, czy to gwarantuje uzyskanie pożądanego efektu.

Uwaga, nie siedzę w Foo ani żadnym z jego dzieci, drzewo Foo jest strukturą zewnętrzną z mojego bieżącego POV.

Odpowiedz

8

Jak o

ref.Foo::say(); 

To, czego szukasz?

+0

Wspaniale, byłem całkowicie nieświadomy takiej składni. – greenoldman

+2

@greenoldman prawdopodobnie widziałeś użycie takie jak 'Base :: foo()' wcześniej, aby wywołać implementację bazy. To naprawdę oznacza po prostu 'this-> Base :: foo()', ponieważ 'this' jest niejawne. – Simple

+0

@ Prosto, dziękuję. Myślałem o tej składni jako o ustawieniu zakresu. – greenoldman

Powiązane problemy