2013-03-27 234 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