boost成员函数指针
问题描述:
我对boost库很新。boost成员函数指针
我试图通过将通过 传递给glutDisplayFunc()等的回调绑定到一个类来完成图形程序的某些操作。
我想完成这个没有一些常量的全局类对象。
在代码中解释:
class CallbackHolder {
public:
void dostuff(void) {
// etc.
}
};
void bind() {
glutIdleFunc((new CallbackHolder())->dostuff);
}
我知道这是可能通过的boost ::绑定的使用和boost ::功能。
但我看到的一个问题是将boost :: function转换回正常的函数指针。
你会怎么做到这一点?
答
您不能将boost::function
转换为正常的函数指针,并且不能将成员函数指针转换为常规函数指针。对于接受回调的函数,您可以提供用户数据。
不幸的是,glut界面不允许您提供用户数据。这意味着你陷入了最丑陋的解决方案,使用全局变量和普通函数。
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);
}
+0
织补。我真的希望我不必这样做,因为源代码可能会变得非常丑陋。不管怎么说,还是要谢谢你。 – object 2013-03-27 06:43:38
您不能将'boost :: function'转换为普通函数指针。你必须使用一个普通的普通函数作为回调,这是没有办法的。 – 2013-03-27 05:57:16