函数指针用法一:传参(多态性)

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;

    自己本身就是一个指针。

posted on 2018-07-20 21:48  YoungBig  阅读(360)  评论(0编辑  收藏  举报

导航