繁体   English   中英

将指针和成员指针连接到函数指针

[英]Joining a pointer and member pointer into a function pointer

请考虑以下代码:

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)加入到void (*)(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)>

您无法从成员指针和对象指针创建函数指针。 您可以获得的是具有相同调用符号的函数对象,例如,使用std::bind()

std::bind(member_func_ptr, class_ptr, _1)

您可以使用此函数对象进行初始化,例如, std::function<void(int)>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM