我需要通過一個標準的函數指針稱爲成員函數,所以我試圖抽象的東西是這樣的:如何從靜態成員函數調用指向成員函數的指針?
class Sample {
public:
virtual void doSomething(void) = 0;
};
class A : public Sample {
void doSomething(void); // details omitted
};
class B : public Sample {
void doSomething(void); // details omitted
};
class Executor {
public:
Executor(Sample *sample)
: func(&sample->doSomething)
{
}
static void *execute(void *data) {
Executor *pX = data;
(pX->*func)(); // error invalid access of func from static function
(pX->*pX->func)(); // error pointer to member type 'void (Sample::)()'
// incompatible with object type 'Executor'
}
private:
void (Sample::*func)(void);
};
int main(void) {
A myA;
B myB;
Executor x0(&myA);
Executor x1(&myB);
externallyInvoke(&Executor::execute, &x0);
externallyInvoke(&Executor::execute, &x1);
}
externallyInvoke
是Linux系統調用,這需要一個函數指針和數據指針。 我想使用一個靜態成員函數和一個this-pointer作爲數據。
...我不希望類如A
或B
擁有靜態成員。所以我的想法是創建一個像Sample
類的接口,該接口被A
和B
擴展。
我的問題是,我不知道如何從Executor::execute
函數內部調用指向成員函數的指針。
無法從靜態函數訪問成員變量 - 什麼不清楚? – 2014-10-28 09:31:59