2013-03-27 323 views
0

我对boost库很新。boost成员函数指针

我试图通过将通过 传递给glutDisplayFunc()等的回调绑定到一个类来完成图形程序的某些操作。

我想完成这个没有一些常量的全局类对象。

在代码中解释:

class CallbackHolder { 
public: 
    void dostuff(void) { 
     // etc. 
    } 
}; 
void bind() { 
    glutIdleFunc((new CallbackHolder())->dostuff); 
} 

我知道这是可能通过的boost ::绑定的使用和boost ::功能。

但我看到的一个问题是将boost :: function转换回正常的函数指针。

你会怎么做到这一点?

+0

您不能将'boost :: function'转换为普通函数指针。你必须使用一个普通的普通函数作为回调,这是没有办法的。 – 2013-03-27 05:57:16

回答

0

您不能将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