gpt4 book ai didi

c++ - 为 SDL 事件过滤创建指向成员函数的非常量指针

转载 作者:行者123 更新时间:2023-11-30 01:20:03 26 4
gpt4 key购买 nike

我正在使用 SDL,我正在尝试提供指向事件过滤器的函数指针。如果我使该函数成为 ObjectWithState 的静态成员,这会很好地工作,但我想让回调函数改变对象的状态。我希望可以使用仿函数来做到这一点,但我无法完全解决。

我可以使用任何 C++11 技巧来完成这项工作吗?

class ObjectWithState
{
int someState;

public:
int operator()(void* userData, SDL_Event *event)
{
return ++someState;
}
};


int main()
{
//boilerplate
ObjectWithState obj;

SDL_EventFilter f = &(obj.operator()); //ERROR -> cannot create non-constant pointer to member function
SDL_SetEventFilter( f, nullptr );
}

最佳答案

使用userdata参数指向你的对象,通过静态方法分派(dispatch)给非静态方法:

class ObjectWithState
{
int someState;

public:
int operator()(SDL_Event *event)
{
++someState
}

static int dispatch(void* userdata, SDL_Event* event)
{
return static_cast<ObjectWithState*>(userdata)->operator()(event);
}
};


int main()
{
//boilerplate
ObjectWithState obj;

SDL_SetEventFilter(&ObjectWithState::dispatch, &obj);
}

关于c++ - 为 SDL 事件过滤创建指向成员函数的非常量指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19938531/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com