メンバー関数へのポインターを、別のクラスのメンバー関数への引数として渡す必要があります。私がやっていることは以下のようなものです。最初の引数として void* ProcessHandler::Task(void* a) を指定して int Processor::AddJob(void ( _pFunc)(void*), void* _pArg) メソッドを呼び出したいと思います。私はそれをやった
TaskFunc pFunc1 = &ProcessHandler::Task;
p_Processor->AddJob(pFunc1,10);
しかし、それはエラーを与えます
エラー: Processor::AddJob(void* (ProcessHandler:: &)(void ), int)' Processor.h:47: 注: 候補は: int Processor::AddJob(void* ( )(ボイド)、ボイド*)
誰かがこれについて私を助けてくれますか.私の実装は次のとおりです.(正確なコードではありません-これよりもはるかに大きいです)
class Processor
{
public:
Processor();
virtual ~Processor();
int AddJob(void *(*_pFunc)(void*), void* _pArg);
};
int Processor::AddJob(void *(*_pFunc)(void*), void* _pArg)
{
//Job addition related code goes here
}
/////////////////////////////////////////////////////////////////////////////
typedef void* (ProcessHandler::*TaskFunc)(void*);
class ProcessHandler
{
public:
ProcessHandler(Processor* _pProcessor);
virtual ~ProcessHandler();
void* Task(void* a);
void Init();
private:
Processor* p_Processor;
};
void* ProcessHandler::Task(void* a)
{
//Task related code goes here
}
void ProcessHandler::Init()
{
TaskFunc pFunc1 = &ProcessHandler::Task;
p_Processor->AddJob(pFunc1,10); //This give the compile error.
}
/////////////////////////////////////////////////////////////////////////
int main()
{
Processor* pProcessor = new Processor();
ProcessHandler* pProcessHandler = new ProcessHandler(pProcessor);
pProcessHandler->Init();
}