函数指针用法一:传参(多态性)
bool IsNpc(APawn* pPawn) const {return (NULL != Cast<ASA2NpcPawn>(pPawn));} bool IsMonster(APawn* pPawn) const ... bool IsPet... typedef bool (*CheckPawnType)(APawn* pPawn) const; void MaskPawn(ASA2Pawn* aPawn, CheckPawnType CheckCall) { if(aPawn && (*CheckCall)(aPawn)) { aPawn->bMask = true; } }
调用方式:
MaskPawn(aPawn, &IsNpc);
MaskPawn(aPawn, &IsPet);
理解:
对比这两种写法:
typedef bool (*CheckPawnType)(APawn* pPawn);
bool (*CheckPawnType)(APawn* pPawn);
第一个:typedef 返回类型(*新类型)(参数表)
未分配内存,而是给bool(*)(APawn* pPawn)类型取了一个别名:CheckPawnType;
使用上:CheckPawnType pPawnType = &IsNpc;
这样就定义了一个函数指针变量。
第二个:返回类型(*函数指针名称)(参数表)
分配了内存,指向空间的指针为CheckPawnType;
使用上:CheckPawnType = IsNpc;
自己本身就是一个指针。