2014-07-01 4 views
5

У меня есть ссылка ref:Как вызвать виртуальный метод без полиморфного эффекта?

Foo &ref = .. 

Я хотел бы вызвать метод ref.say(), который определяется как виртуальный в Foo, и я знаю, что он переписан в дочерних классах (потому что я их писал, а).

Однако я бы хотел позвонить say, как если бы он был не полиморфный, поэтому версия, которая определена в Foo, а не в дочерних классах.

Как это сделать?

Одна вещь, которая приходит мне на ум - взять указатель ref, чем разыгрывать ее, и этот трюк должен убить полиморфизм, но я не уверен, что это гарантированно принесет желаемый эффект.

Обратите внимание: я не сижу внутри Foo или любого его дочернего элемента, дерево Foo - это внешняя структура из моего текущего POV.

ответ

8

Как насчет

ref.Foo::say(); 

Это то, что вы ищете?

+0

Отлично, я совершенно не знал о таком синтаксисе. – greenoldman

+2

@greenoldman Вы, вероятно, видели использование, как 'Base :: foo()' before, для вызова реализации базы. Это просто означает 'this-> Base :: foo()', потому что 'this' неявно. – Simple

+0

@ Простой, спасибо. Я думал об этом синтаксисе как о настройке области. – greenoldman

Смежные вопросы