Вызов функции базового класса или одного из наследников через переменную типа std::functional

Задача : необходимо, чтобы в зависимости от настроек объекта вызывалась либо некоторая функция самого базового класса, либо некоторая функция одного из объектов. Следующий пример её реализует

#include <iostream>
#include <functional>

using namespace std;

class A
{
public:
  void exec() {m_func(*this);};
  void select(bool itA)
  {
    if (itA)
      m_func = &A::funcA;
    else
      m_func = &A::funcB;
  }
protected:
  void funcA() {cout << "class A: funcA" << endl;}
  virtual void funcB() = 0;
//  virtual void funcB() {cout << "class A: funcB" << endl;}

private:
  function<void(A&)> m_func{&A::funcB};
};


class B : public A
{
protected:
  virtual void funcB() override {cout << "class B: funcA" << endl;}
};

int main()
{
  B b;
  b.select(true);
  b.exec();
  b.select(false);
  b.exec();
  return 0;
}

"m_func = &A::funcB;" - заносит в переменную m_func адрес переопределённой в наследниках функции. Должно ли происходит именно так, и если да то как тогда записать в m_func именно адрес метода базового класса.


Ответы (0 шт):