스레드를 소유하고있는 싱글 톤에서 함수 포인터의 배열을 구현하려고합니다. 스레드 함수에서 멤버가 객체에 상대적이어야한다는 오류가 발생합니다.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){}
SingletonPattern 나던에서의 getInstance를 통해 호출이 더 나은 그것을 만들
헤더 ... commentline 더 많은. 제안 사항이 있으십니까?
그룹 문제입니까? '(pParent -> * (ftnptr [...]))'를 시도하십시오. –
아니요. 그 원인은 다른 곳에 숨어있는 것 같습니다. 나는 이것을 가지고있다 : "(this -> * internalUpdate) (hWnd);" 그 코드에서 somhere. 잘 작동합니다. – ManuelSchneid3r
나는 대괄호 그룹을 구체적으로 언급하고 있었다. 귀하의 반례는 관련이 없기 때문에 관련이 없습니다. –