0

我对 boost 库很陌生。

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

我想在没有一些常量全局类对象的情况下完成此操作。

用代码解释:

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

我知道这可以通过使用 boost::bind 和 boost::function 来实现。

然而,我确实看到的一个问题是将 boost::function 转换回普通函数指针。

你将如何做到这一点?

4

1 回答 1

0

您不能从转换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 );
}
于 2013-03-27T05:59:11.267 回答