VS-c++ 函数指针

函数指针,指针吗,带个*很正常,然后是函数,前面摆返回值,后面摆参数类型也很正常,怎么没有参数名?名字只是代号而已~~~

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值