我如何传递一个类成员函数作为回调? [英] How can I pass a class member function as a callback?

查看:162
本文介绍了我如何传递一个类成员函数作为回调?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的API要求我传递一个函数指针作为回调。我试图从我的类使用这个API,但我收到编译错误。

I'm using an API that requires me to pass a function pointer as a callback. I'm trying to use this API from my class but I'm getting compilation errors.

这是我从我的构造函数做的:

Here is what I did from my constructor:

m_cRedundencyManager->Init(this->RedundencyManagerCallBack);

这不会编译 - 我得到以下错误:

This doesn't compile - I get the following error:


错误8错误C3867:'CLoggersInfra :: RedundencyManagerCallBack':函数调用缺少参数列表;使用'& CLoggersInfra :: RedundencyManagerCallBack'创建指向成员的指针

Error 8 error C3867: 'CLoggersInfra::RedundencyManagerCallBack': function call missing argument list; use '&CLoggersInfra::RedundencyManagerCallBack' to create a pointer to member

我试过建议使用 & CLoggersInfra :: RedundencyManagerCallBack - 没有为我工作。

I tried the suggestion to use &CLoggersInfra::RedundencyManagerCallBack - didn't work for me.

此建议/解释?

我使用VS2008。

谢谢!

推荐答案

由于你现在显示你的init函数接受一个非成员函数。所以做这样:

As you now showed your init function accepts a non-member function. so do it like this:

static void Callback(int other_arg, void * this_pointer) {
    CLoggersInfra * self = static_cast<CLoggersInfra*>(this_pointer);
    self->RedundencyManagerCallBack(other_arg);
}

并调用Init与

m_cRedundencyManager->Init(&CLoggersInfra::Callback, this);

这样做是因为指向静态成员函数的函数指针不是成员函数指针,处理就像只是一个自由功能的指针。

That works because a function pointer to a static member function is not a member function pointer and can thus be handled like just a pointer to a free function.

这篇关于我如何传递一个类成员函数作为回调?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆