[英]C++: Function pointer to another class function
我有2節課
class B {
public:
int func(int i);
};
class A {
public:
typedef int (B::*fPtr)(int);
void run();
B* mB;
};
void A::run() {
// create a pointer
fPtr p = &(B::func);
// invoke the function
mB->*p(2); <------- Compilation Error
}
我需要的是在A的運行函數中創建一個指向func()的指針。 我得到一個編譯錯誤,說mB不對應於帶有1個參數的函數。
請幫忙
你需要在函數表達式周圍加上括號:
(mB->*p)(2);
但正如其他人所指出的那樣,幾乎可以肯定有更好的方法來做你想要做的事情。
類的實例方法總是為this
指針隱藏第一個參數,因此它與函數指針typedef不兼容。 無法直接獲取指向成員函數的指針。 典型的解決方法是使用“thunk”,在其中傳遞一個靜態函數,該函數接受通用的“catch all”參數(例如void *
),該參數可以靜態地轉換為您可以調用成員函數的指針。 例:
class B
{
public:
static void MyThunk(void * obj)
{
static_cast<B *>(obj)->MyRealFunc();
}
void MyRealFunc()
{
// do something here
}
// . . .
};
您可以輕松獲得指向靜態函數的指針,因為它沒有“隱藏this
”,只需使用B::MyThunk
引用它。 如果您的函數需要其他參數,您可以使用仿函數之類的東西來捕獲必要的參數和狀態。
你一定要閱讀這個C ++ FAQ Lite頁面,它會告訴你更多關於這一切的信息: 指向成員函數的指針
為什么你不能調用mB->func(2);
?
如果你需要B的不同函數,也許可以查看virtual
函數和類繼承
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.