Возможно ли в C++ иметь класс, переопределяющий виртуальную функцию, но иметь виртуальную диспетчеризацию только тогда, когда функция вызывается через суперкласс (т.е. нет, когда он вызывается на что-то статически типизированное как подкласс)? Я знаю, что это не то, что происходит, но есть ли какой-либо способ достичь чего-то близкого?
Причина того, что у меня есть два класса, которые оба раскрывают функцию flush ()
. Подавляющее большинство времени в моей программе я вызываю flush ()
непосредственно на объект подкласса, который я знаю тип, поэтому мне не нужна виртуальная отправка. Однако я хочу добавить суперкласс в смесь, так что очень редко я могу передать ссылку на экземпляр любого из классов в функцию doTenFlush ()
, которая вызовет flush ()
виртуально.
Я знаю, что могу использовать шаблоны вместо виртуальных функций, и я знаю, что у меня могут быть две различные функции (например, flushVirtual ()
, который только что вызвал flushNonVirtual ()
и вызвал flushNonVirtual ()
везде, где мне не нужна виртуальная отправка). Но они оба кажутся немного похожими на бросание кода на проблему, которая в значительной степени синтаксическая. Есть ли более элегантный способ достичь этого?
Возможно, что более важно, кто-нибудь знает, почему виртуальность наследуется в C++?
struct Base
{
virtual ~Base(){}
virtual void func();
};
struct Derived : public Base
{
void func(){}
};
void callVirtually(Base &base)
{
base.func();//this will use virtual dispatch
}
void callStatically(Derived &derived)
{
derived.func();//I don't want/need this to use virtual dispatch
}
int main()
{
Derived derived;
callVirtually(derived);
callStatically(derived);
}
-121--1226865- Я играю с функцией, которую я хочу связать со всеми ссылками. В настоящее время функция срабатывает при загрузке страницы, а не при нажатии на ссылку.
Вот мой код. (Я могу отправить функцию sunDiv ()
, если вам нужно ее увидеть.) Можете ли вы сказать, что я делаю что-то не так или глупо?
$(document).ready(function(){
$('a.test').bind("click", showDiv());
});
Спасибо!