В C ++ я впервые столкнулся с указателями на функции.
Я попытался использовать это, чтобы сделать его похожим на Action и Delegate в C #.
Однако при объявлении указателя на функцию необходимо указатьтип класса, в котором существует функция.
ex) void (A :: * F) ();
Можно ли использовать указатель на функцию, которая может хранить функцию-член любого класса?
Обычно используются указатели функций, как показано в приведенном ниже коде.
class A {
public:
void AF() { cout << "A::F" << endl; }
};
class B {
public:
void(A::*BF)();
};
int main()
{
A a;
B b;
b.BF = &A::AF;
(a.*b.BF)();
return 0;
}
Я хочу использовать его, как показано ниже.
возможно ли это?
ИлиЕсть ли что-то еще, чтобы заменить указатель функции?
class A {
public:
void AF() { cout << "A::F" << endl; }
};
class B {
public:
void(* BF)();
};
int main()
{
A a;
B b;
b.BF = a.AF;
return 0;
}
Я решил вопрос через ответ.
Спасибо!
#include <functional>
#include <iostream>
class A {
public:
void AF() { std::cout << "A::F" << std::endl; }
};
class C {
public:
void CF() { std::cout << "C::F" << std::endl; }
};
class B {
public:
B(){}
std::function<void()> BF;
};
int main() {
A a;
C c;
B b;
b.BF = std::bind(&A::AF, &a);
b.BF();
b.BF = std::bind(&C::CF, &c);
b.BF();
int i;
std::cin >> i;
return 0;
}