[英]c++ pointer to a function as argument
我有一個帶有cThread類的C ++ API,並且此方法可以創建線程:
void cThread::start(void(*a_function)(void), CThreadPriority a_level);
我已經完成了一個類和一個init()方法來啟動一個線程,並執行了要由該線程執行的updateHaptics()方法:
void EntryClass::init()
{
typedef void (EntryClass::*method)();
method p;
p = &EntryClass::updateHaptics;
// create a thread which starts the main haptics rendering loop
cThread* hapticsThread = new cThread();
hapticsThread->start(p, CTHREAD_PRIORITY_HAPTICS);
}
void EntryClass::updateHaptics(void)
{
// ...
}
我的問題是將updateHaptics()方法作為參數傳遞給cThread :: start()方法。
我有這個錯誤:
1>EntryClass.cpp(55): error C2664: 'void chai3d::cThread::start(void (__cdecl *)(void *),const chai3d::CThreadPriority,void *)' : impossible de convertir l'argument 1 de 'method' en 'void (__cdecl *)(void)'
REM:我在Windows 8 / Visual Studio下
據我所知,我們只能將靜態函數用作線程proc。 是的,我們也可以通過類靜態函數。
您指示的簽名
void(*a_function)(void)
是用於函數,而不是用於類方法。 靜態方法也可以
注意與您使用的typedef的區別:
void (EntryClass::*method)();
定義可以是:
class EntryClass {
public:
void init();
static void updateHaptics(); // <--- NOTE the static
};
和你的實現
void EntryClass::init()
{
typedef void (*method)(); // <---- NOTE THIS CHANGE
method p;
p = &EntryClass::updateHaptics;
// create a thread which starts the main haptics rendering loop
cThread* hapticsThread = new cThread();
hapticsThread->start(p, CTHREAD_PRIORITY_HAPTICS);
}
void EntryClass::updateHaptics(void)
{
// ...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.