Учитывая следующий класс, который просто отображает внутренний функтор f
на функцию, которая будет запущена позже:
class A {
private:
int (A::*f)(int);
int foo(int x) { return x; }
int bar(int x) { return x*2; }
public:
explicit A(bool foo=true) { f = foo ? &A::foo : &A::bar; }
int run(int x) { return (this->*f)(x); }
};
Теперь скажите, что у меня есть другой класс, B
:
class B {
public:
int foo(int) { return x*x; }
};
И функция foo
:
int foo(int x) { return 0; }
Я знаю, что невозможно A
назначить и запустить B::foo
или foo
, поскольку их прототипы различаются: int (A::*)(int)
против int (B::*)(int)
против int (*)(int)
.
То, что я спрашиваю, есть ли у них какой-либо способ шаблонизировать A::f
так, чтобы он мог взять любого из них?