[英]How to call C++ member function using typless Function Pointer
我正在嘗試創建C ++ Timer模塊,並計划將回調函數傳遞給我的API。 這樣,其他模塊可以注冊回調,並且當發生超時時,我可以通知它。 在C中使用簡單的函數指針很容易做到這一點,但是在C ++中,我們如何傳遞現有實例的Member函數。 因為當計時器調用回調(成員)方法時,我需要訪問成員(此指針)。
有很多例子知道被調用對象的類型,但是我正在創建一個通用模塊,因此我沒有做任何更改以將其強制轉換為成員的確切類型。
我沒有使用C ++ 11這么舊的版本用於舊版嵌入式軟件。
我的API可能是
void (*TimerCallback)(void);
Timer::TimerCallback userCB;
Timer::Timer(TimerCallback cb) {
userCB = cb;
}
void Timer::invoke() {
userCB();
}
讓我們假設我有一個需要計時器的C ++類
class myModule {
private:
Timer* timer;
void timerCallbackFunc(void) {
count << "This " << this << endl;
}
public:
myModule() {
timer = new Timer(timerCallbackFunc);
}
}
但是我找不到用所有者的this指針調用成員函數的任何方法,因此無法訪問成員字段。
C ++有什么方法或任何限制嗎?
謝謝。
似乎您需要一些簡單的東西,而不是在C ++ 03中重新發明C ++ 11。
因此,請考慮使用舊的C樣式回調,在該回調中您將客戶端代碼的狀態指針傳遞給該回調。 客戶端代碼可以像這樣:
timer = new Timer( timerCallback, this );
在回調(普通的命名空間作用域函數或static
類成員)中,它以必須正確轉換的void*
獲取this
參數,然后調用非static
成員函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.