C++函数,它接受一个成员函数并返回一个静态lambda/std :: function

Adr*_*ire 0 c++ lambda member c++11

我想实现一个成员函数,该函数获取指向其他成员函数的指针并返回静态绑定.可能是什么:a lambda或a? std::function.

从那时起,我在C++ 11中做了以下意图但没有成功:

#include <functional>
#include <iostream>

class MyClass{
public:
    auto link( std::function<void(MyClass::*)(int)> func)->std::function<void(int)>
    {
        return [this, func](int i){func(i);};
    }
    auto myFunc(int i)->void { std::cout << "Ok:" << i << std::endl; }

    auto test ()->void
    {
        link(&MyClass::myFunc)(4);
    }
};

auto main()->int
{
    MyClass c;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Bri*_*ian 5

专业化std::function<T>如果只被定义T为函数类型.没有std::function<T>地方T是指向成员函数类型.无论如何,std::function如果你只想传递指向成员函数的指针,那么构造一个参数是没有意义的.您可以直接这样做:

auto link(void (MyClass::*func)(int))->std::function<void(int)>
Run Code Online (Sandbox Code Playgroud)

必须使用.*or ->*运算符调用指向成员函数的指针,并在左侧使用适当类的表达式或指向类类型的指针(分别).因此在这种情况下你可以写:

return [this, func](int i){(this->*func)(i);};
Run Code Online (Sandbox Code Playgroud)