[英]c++ pointer to function assignment
如果我有:
class MyClass {
...... my code....
private:
void myFunction(int p);
}
in cpp file:
MyClass::MyClass() {
void (*pointer)(int);
pointer = &myFunction;
}
MyClass::myFunction(int p) {
//.... my code .... //
}
這可能嗎? 我有一個分配問題:
cannot convert 'void(MyClass::*)(int)' to 'void (*)(int)' in assignment
您需要像這樣鍵入一個指針類型:
typedef void (MyClass::*FnPointer)(int);
並創建如下類型的指針:
FnPointer pnt = &MyClass::myFunction;
該函數可以這樣調用:
MyClass obj;
(obj.*pnt)( 3 );
我不知道OP是否有目標,還是只是在玩游戲,但是這種方法對於創建回調或委托很有用。 結構將保存並用指向類實例的引用或指針以及指向該類的成員函數的指針初始化。
請參閱: 什么是C ++委托?
實際上,錯誤消息對於告訴您什么地方出了問題非常有用。 您聲明了函數指針,但是必須聲明方法指針。
嘗試typedef void (*pointer)(int);
在類的聲明中,然后通過MyClass::pointer
引用類型。
除非您利用它們的實現細節並使用reinterpret_cast,否則方法指針將毫無用處。 如果您確實要執行此操作,請參閱http://www.codeproject.com/Articles/7150/Member-Function-Pointers-and-the-Fastest-Possible 。
現在,如果您正在運行c ++ 11,則可以使用lambda函數執行此操作。 代替void (*pointer)(int);
您將使用std::function<void(int)> pointer;
或auto pointer = <the lambda>
。
現在,您可以使用[&this](int a){return this->myFunction(a);};
代替&myFunction
或&MyClass::myFunction
[&this](int a){return this->myFunction(a);};
。 然后,您可以將其分配給std :: function變量或類型推斷的變量(使用auto)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.