在c++中,类A含有成员对象b,b的函数指针如何指向类A的非静态成员函数
时间: 2024-03-10 13:51:21 浏览: 164
通过函数指针调用C++非静态成员函数
5星 · 资源好评率100%
在 C++ 中,如果类 A 含有成员对象 b,b 的函数指针可以通过指向 A 对象的指针或引用指向 A 的非静态成员函数。以下是两种实现方式:
1. 使用指向 A 对象的指针或引用:
```
class B {
public:
void (A::*pfunc)(); // 定义 A 的成员函数指针类型
void func() { /* ... */ }
};
class A {
public:
B b;
void funcA() { /* ... */ }
};
A obj;
A* ptr = &obj;
B* bptr = &(obj.b);
(obj.*(&A::funcA))(); // 直接调用 A 的成员函数
(ptr->*(&A::funcA))(); // 使用指针调用 A 的成员函数
(obj.*bptr->pfunc)(); // 直接调用 B 的成员函数指针所指向的成员函数
(ptr->*bptr->pfunc)(); // 使用指针调用 B 的成员函数指针所指向的成员函数
```
2. 使用 std::function 和 std::bind:
```
#include <functional>
class B {
public:
std::function<void()> pfunc; // 定义函数对象类型
void func() { /* ... */ }
};
class A {
public:
B b;
void funcA() { /* ... */ }
};
A obj;
obj.b.pfunc = std::bind(&A::funcA, &obj); // 绑定 A 的成员函数和对象
obj.funcA(); // 直接调用 A 的成员函数
obj.b.func(); // 直接调用 B 的成员函数
obj.b.pfunc(); // 调用 B 的函数对象
```
阅读全文