Есть ли способ не наследовать «виртуальность» функции в подклассе?

Возможно ли в 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());

});

Спасибо!

38
задан Filipp W. 15 May 2019 в 05:50
поделиться