类成员的函数指针转普通函数指针
时间: 2024-05-10 08:12:23 浏览: 123
类成员函数指针和普通函数指针是有区别的,因为类成员函数需要有一个隐含的this指针。因此,如果要将类成员函数指针转换为普通函数指针,就需要用到一些技巧。
具体的实现方法是:将类成员函数指针与对象的地址绑定起来,然后再将其转换为普通函数指针。这样,当调用普通函数指针时,就会自动将对象的地址传递给它。
下面是一个示例代码,演示了如何将类成员函数指针转换为普通函数指针:
```
#include <iostream>
using namespace std;
class MyClass {
public:
void print(int x) { cout << "x = " << x << endl; }
};
void call_print(int x) {
MyClass obj;
void (MyClass::*func_ptr)(int) = &MyClass::print;
(obj.*func_ptr)(x);
}
int main() {
void (*p)(int) = call_print;
(*p)(10);
return 0;
}
```
在上述示例代码中,我们定义了一个名为call_print的函数,它接受一个int类型的参数,并将它传递给MyClass类的print函数。在call_print函数中,我们首先创建了MyClass类的一个对象obj,然后定义了一个名为func_ptr的类成员函数指针,它指向MyClass类的print函数。最后,我们通过(obj.*func_ptr)(x)的方式来调用MyClass类的print函数。
接下来,在main函数中,我们定义了一个名为p的普通函数指针,它指向call_print函数。然后,我们通过(*p)(10)的方式来调用call_print函数,并将10作为参数传递给它。这样,就实现了将类成员函数指针转换为普通函数指针的功能。
阅读全文