gpt4 book ai didi

c++ - 将指针和成员指针连接到函数指针中

转载 作者:行者123 更新时间:2023-11-30 02:53:23 25 4
gpt4 key购买 nike

请考虑这样的代码:

class MyClass{
public:
void MyFunc(int x){
std::cout << x << std::endl;
}
};

int main(){
MyClass* class_ptr = new MyClass();
void (Myclass::*member_func_ptr)(int) = &MyClass::MyFunc;

// This should output '5'.
(class_ptr->*member_func_ptr)(5);

/* ??? */

// I want the following to output '5' exactly the same way as previous call.
func_ptr(5);
}

我应该如何完成此代码以让 func_ptr(...)*class_ptr 调用 MyFunc?

如果可能的话,我很乐意以某种方式加入一个MyClass*和一个void (Myclass::*)(int)到一个无效 (*)(int)

如果没有,我希望巧妙地使用 std::mem_fnstd::function(或其他功能实用程序)可能会成功。

理想情况下,我想要一个 C++11 解决方案(因为例如 std::mem_fun 现已弃用)。

最佳答案

你不能得到一个普通的函数指针,但是你可以使用bind得到一个函数对象。或 lambda:

auto bound = std::bind(member_func_ptr, class_ptr, std::placeholders::_1);
auto lambda = [=](int x){return (class_ptr->*member_func_ptr)(x);}

bound(5); // should output 5
lambda(5); // should output 5 too

这两个都可以转换成std::function<void(int)>如果你愿意的话。

关于c++ - 将指针和成员指针连接到函数指针中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18044070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com