我嘗試在擁有一個線程的單例中實現一個函數指針數組。 在線程函數中,我得到一個錯誤,告訴我一個成員必須是相對於一個對象的。更多的commentline ...FunktionPointerArray in Singleton
頁眉:
typedef struct{
int action;
HWND handle;
}JOB;
class Class{
public:
enum Action { 1,2 };
private:
JOB m_currentJob;
queue<JOB> Jobs;
static DWORD WINAPI ThreadFunction(LPVOID lpParam);
void (Class::*ftnptr[2])(JOB Job);
void Class::ftn1(JOB Job);
void Class::ftn2(JOB Job);
// Singleton pattern
public:
static Class* getInstance(){
if(sInstance == NULL)
sInstance = new Class();
return sInstance;
}
private:
Class(void);
~Class(void);
static Class* sInstance;
};
身體:
#include "Class.h"
Class* Class::sInstance = NULL;
Class::Class(){
this->ftnptr[0] = &Class::ftn1;
this->ftnptr[1] = &Class::ftn2;
}
DWORD WINAPI Class::AutoplayerThreadFunction(LPVOID lpParam)
{
Class *pParent = static_cast<Class*>(lpParam);
while(true){
(pParent->*ftnptr[pParent->m_currentJob.action])(pParent->m_currentJob);
/* The line above causes the compiler error. Curious to me is that
* neither "pParent->m_currentJob" nor "pParent->m_currentJob" cause
* any problems, although they are members too like the ftnptr array.
*/
}
}
void Class::ftn1(JOB Job){}
void Class::ftn2(JOB Job){}
通過的getInstance從SingletonPattern犯規呼叫使它更好。 有什麼建議嗎?
這是一個分組問題嗎?嘗試'(pParent - > *(ftnptr [...]))'。 –
沒有。原因似乎隱藏在其他地方。我有這個:「(this - > * internalUpdate)(hWnd);」代碼中的其他地方。它的工作正常。 – ManuelSchneid3r
我特指的是方括號的分組。你的反例是不恰當的,因爲它沒有這些。 –