成员函数指针转换为 智能指针
时间: 2023-09-28 13:05:30 浏览: 141
成员函数指针是不能直接转换为智能指针的,因为成员函数指针需要绑定到一个对象上才能调用,而智能指针是用来管理动态分配的内存的,两者的用途不同。
如果想要将一个成员函数指针绑定到一个对象上,可以使用`std::bind`函数或者Lambda表达式。`std::bind`函数可以将一个成员函数指针与对象绑定,生成一个函数对象,可以直接调用该函数对象来调用成员函数。
例如,假设有一个类`MyClass`,其中有一个成员函数`void func(int x, int y)`,可以使用`std::bind`函数将该成员函数与对象绑定,生成一个函数对象`func_obj`,如下所示:
```
#include <functional>
#include <memory>
class MyClass {
public:
void func(int x, int y) {
// do something
}
};
int main() {
std::shared_ptr<MyClass> ptr = std::make_shared<MyClass>(); // 创建智能指针
auto func_obj = std::bind(&MyClass::func, ptr.get(), std::placeholders::_1, std::placeholders::_2); // 绑定成员函数
func_obj(1, 2); // 调用成员函数
return 0;
}
```
在上面的代码中,首先使用`std::make_shared`函数创建了一个`MyClass`对象的智能指针`ptr`,然后使用`std::bind`函数将`func`成员函数与`ptr`对象绑定,生成一个函数对象`func_obj`。最后通过`func_obj(1, 2)`的方式调用`func`函数并传入参数1和2。
类似地,也可以使用Lambda表达式来实现成员函数的调用。
阅读全文