提升成员函数指针

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 );

【讨论】:

该死。我真的希望我不必这样做,因为源代码会变得非常丑陋。还是谢谢。

以上是关于提升成员函数指针的主要内容,如果未能解决你的问题,请参考以下文章

C++函数指针与成员函数指针

C++|详解类成员指针:数据成员指针和成员函数指针及应用场合

c++类的成员函数指针如何转为普通指针

C++中怎么获取类的成员函数的函数指针

如何从另一个成员函数调用成员函数指针?

c++怎样将指向【成员函数】的指针强转成指向【普通函数】的指针