3 回答
TA貢獻1906條經驗 獲得超3個贊
// 1 define a function pointer and initialize to NULLint (TMyClass::*pt2ConstMember)(float, char, char) const = NULL;
// C++class TMyClass{public:
int DoIt(float a, char b, char c){ cout << "TMyClass::DoIt"<< endl; return a+b+c;};
int DoMore(float a, char b, char c) const
{ cout << "TMyClass::DoMore" << endl; return a-b+c; };
/* more of TMyClass */};pt2ConstMember = &TMyClass::DoIt; // note: <pt2Member> may also legally point to &DoMore
// Calling Function using Function Pointer(*this.*pt2ConstMember)(12, 'a', 'b');TA貢獻1875條經驗 獲得超3個贊
如何獲得類成員函數的函數指針,然后使用特定對象調用該成員函數?
typedef
typedef void(Dog::*BarkFunction)(void);
->*
(pDog->*pBark)();
此外,如果可能的話,我也希望通過指針調用構造函數。這是可能的嗎?如果可能的話,最好的方法是什么?
#include <iostream>class Animal{public:
typedef Animal*(*NewAnimalFunction)(void);
virtual void makeNoise()
{
std::cout << "M00f!" << std::endl;
}};class Dog : public Animal{public:
typedef void(Dog::*BarkFunction)(void);
typedef Dog*(*NewDogFunction)(void);
Dog () {}
static Dog* newDog()
{
return new Dog;
}
virtual void makeNoise ()
{
std::cout << "Woof!" << std::endl;
}};int main(int argc, char* argv[]){
// Call member function via method pointer
Dog* pDog = new Dog ();
Dog::BarkFunction pBark = &Dog::makeNoise;
(pDog->*pBark)();
// Construct instance via factory method
Dog::NewDogFunction pNew = &Dog::newDog;
Animal* pAnimal = (*pNew)();
pAnimal->makeNoise();
return 0;}Dog*Animal*Dog* (*)()Animal* (*)().
newDogtypedef
TA貢獻1802條經驗 獲得超5個贊
this
boost::function
this
class myclass{
public:
virtual void myrealmethod () = 0;
static void myfunction (myclass *p);}void myclass::myfunction (myclass *p){
p->myrealmethod ();}myfunction
編輯::&myclass::myfunctionmyclass::myfunction (arg);.
- 3 回答
- 0 關注
- 560 瀏覽
添加回答
舉報
