Вызов функции базового класса или одного из наследников через переменную типа 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 именно адрес метода базового класса.