函数指针,指针吗,带个*很正常,然后是函数,前面摆返回值,后面摆参数类型也很正常,怎么没有参数名?名字只是代号而已~~~
1. 对于普通的函数指针,直接用。
int Fun(int a, int b)
{
return a + b;
}
int main()
{
int (*FunPointer)(int, int);
FunPointer = &Fun;
FFunctionLibrary::Println(FunPointer(10, 20));//30
return 0;
}
2. 对于类函数指针,特殊一些。
2.1 当你使用指针调用类静态函数和普通的函数指针无异。
void (*PtrStaticFun)() = &ClassName::StaticFun;
class ACast{
public:
static void doStaticSomething()
{
FFunctionLibrary::Println("you have done something about static");
}
};
void (*FunPointer)()=&ACast::doStaticSomething;
FunPointer();
2.2 当你使用指针调用类非静态函数时
需要使用 (类实例指针->*指针)() 的方式,特别注意声明是类名的位置。
void (ClassName::*PtrNonStaticFun)() = &ClassName::NonStaticFun;
class ACast{
public:
void doSomething()
{
FFunctionLibrary::Println("you have done something about void");
};
};
ACast* Pointer=new ACast();
void (ACast::*FunPtr)()=&ACast::doSomething;
(Pointer->*FunPtr)();
3. 转换
c++提供了一种新型的函数指针转换符
reinterpret_cast< 目标函数指针 >(待转换函数指针),慎用。
class ACast{
public:
void doSomething()
{
FFunctionLibrary::Println("you have done something about void");
};
int doSomethingelse()
{
FFunctionLibrary::Println("you have done something about int");
return 0;
};
};
ACast *Pointer=new ACast();
typedef void(ACast::*FunPtr)();
FunPtr FunPtrArray[10];
FunPtrArray[0]=&ACast::doSomething;
FunPtrArray[1]=reinterpret_cast<FunPtr>(&ACast::doSomethingelse);
(Pointer->*FunPtrArray[0])();//you have done something about void
(Pointer->*FunPtrArray[1])();//you have done something about int