我有一個基類Base
,它有方法runUserMethod(void * pointer_to_method)
。(C++)如何指向子類中的方法?
class Base {
int runUserMethod(METHTYPE pointer_to_method) {
// do some stuff before
int retval = pointer_to_method();
// do some stuff after
return retval;
}
};
現在,我想在某種程度上,它是能夠運行由Base
一個子類實現的任何方法,但這種方法遵循一些標準簽名以實現runUserMethod
,如int <methodname> (void)
例如,假設用戶創建像類UserClass
:
class UserClass : public Base {
int user_method (void);
};
我應該METHTYPE
是,這樣我可以做到以下幾點?
Base * b = new UserClass();
int retval = b->runUserMethod(&UserClass::user_method);
此外,它會工作嗎?有沒有更好的方法來做到這一點?基本上,我試圖做的是攔截調用子類的方法調用,或多或少透明的方式給用戶。
你是知道的,一個'無效*'和成員函數指針不一定是相同的尺寸(和最經常都沒有),這是在他們之間鑄造往往會失敗(除了它主要是UB反正)? – PlasmaHH 2013-02-25 16:51:00
只是做'UserClass()。user_method()'。忘記'runUserMethod'和派生類的所有複雜性以及什麼。調用成員函數是微不足道的。 – 2013-02-25 17:01:37
@ Cheersandhth.-Alf'UserClass'和'user_method'事先不知道......我使用'runUserMethod'函數截取對子類方法的調用。 – 2013-02-25 17:08:05