[英]C++ function pointer to member function
我有一个工人 class,它在构造函数中进行回调 function 指针初始化。 我想在我的 class 中实例化工作人员,并提供指向成员 function 的指针作为回调。
工人 class:
class Worker
{
public:
typedef int (*callFunct)(int);
Worker(callFunct callback = nullptr);
~Worker();
private:
callFunct m_callback = nullptr;
};
Worker::Worker(callFunct callback) : m_callback(callback)
{
}
这是我的 class,我想在其中拥有Worker
实例和成员回调 function:
class myClass
{
public:
myClass();
~myClass() = default;
private:
int myCallback(int x);
Worker m_worker {&myClass::myCallback};
};
不幸的是,这不能编译:
error: could not convert '{&myClass::myCallback}' from '<brace-enclosed initializer list>' to 'Worker'
我知道在处理指向成员 class 的指针时,我还必须提供实例 object 。 但是在这种情况下,当我需要指向 class 成员的指针时,正确的做法是什么?
指向非成员函数的指针与指向(非静态)成员函数的指针不同!
不同之处在于(非静态)成员 function 需要调用 object ,指向非成员 function 的指针没有。
您可以使用std::function
和lambdas来创建回调:
class Worker
{
public:
using callFunct = std::function<int(int)>;
Worker(callFunct callback)
: m_callback(callback)
{
}
private:
callFunct m_callback;
};
class myClass
{
public:
myClass()
: m_worker([this](int x) { return myCallback(x); })
{
}
private:
int myCallback(int x);
Worker m_worker;
};
或者,如果回调不需要访问myClass
object,则制作 function static
:
class myClass
{
public:
myClass();
private:
static int myCallback(int x);
Worker m_worker {&myClass::myCallback};
};
[正如其他人在对该问题的评论中提到的那样]
或者一个普通的 lambda 做myClass::myCallback
会做的事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.