提升成员函数指针
Posted
技术标签:
【中文标题】提升成员函数指针【英文标题】:boost member function pointers 【发布时间】:2013-03-27 05:45:01 【问题描述】:我对 boost 库非常陌生。
我试图通过绑定传递的回调来为图形程序完成一些事情 到 glutDisplayFunc() 等到单个类。
我想在没有一些常量全局类对象的情况下完成此操作。
用代码解释:
class CallbackHolder
public:
void dostuff(void)
// etc.
;
void bind()
glutIdleFunc((new CallbackHolder())->dostuff);
我知道这可以通过使用 boost::bind 和 boost::function 来实现。
我确实看到的一个问题是将 boost::function 转换回普通函数指针。
你会如何做到这一点?
【问题讨论】:
您无法将boost::function
转换为普通函数指针。您必须使用常规的普通函数作为回调,没有办法绕过它。
【参考方案1】:
不能从boost::function
转换为普通函数指针,也不能从成员函数指针转换为普通函数指针。接受回调的函数有一些解决方法,您可以在其中提供用户数据。
不幸的是,过剩界面不允许您提供用户数据。这意味着你被困在最丑陋的解决方案中,使用全局变量和普通函数。
class CallbackHolder
public:
void dostuff(void)
// etc.
;
CallbackHolder * g_callbackHolder = NULL;
void call_callback_holder(void)
if(g_callbackHolder) g_callbackHolder->dostuff();
void bind()
g_callbackHolder = new CallbackHolder();
glutIdleFunc( &call_callback_holder );
【讨论】:
该死。我真的希望我不必这样做,因为源代码会变得非常丑陋。还是谢谢。以上是关于提升成员函数指针的主要内容,如果未能解决你的问题,请参考以下文章