相关疑难解决方法(0)

在将void*转换为任何内容时,我应该使用static_cast还是reinterpret_cast

static_cast和reinterpret_cast似乎都可以很好地将void*转换为另一个指针类型.是否有充分理由支持其他人?

c++ pointers static-cast reinterpret-cast

183
推荐指数
2
解决办法
6万
查看次数

使用libevent回调成员函数

我试图将一个成员函数传递给libevent,它应被视为回调.

#include <event.h>

class A
{
    public:
        void eventcb(evutil_socket_t fd, short events, void *ctx) { }
};


static void global_eventcb(evutil_socket_t fd, short events, void *ctx) { }

typedef void (A::*mthd)(evutil_socket_t, short, void*);

int main(void)
{
    struct event_base *evbase = event_base_new();

    mthd eventcb = &A::eventcb;
    A *instance = new A;
    (instance->*eventcb)(NULL, 0, NULL);

    struct event *timer1 = evtimer_new(evbase, global_eventcb, NULL);
    struct event *timer2 = evtimer_new(evbase, (instance->*eventcb), NULL);

    return 0;
}   
Run Code Online (Sandbox Code Playgroud)

我可以在A类中成功创建一个指向eventcb的方法指针,在A的实例上调用它(第20行).

此外,在第22行传递全局函数(如在C中一样)也可以正常工作.

但是,在第23行,我尝试将我的方法指针传递给libevent,当我编译它时,我得到以下错误(使用 …

c++ member-function-pointers libevent

2
推荐指数
1
解决办法
4629
查看次数