zoukankan      html  css  js  c++  java
  • 用typedef定义函数指针类型(转)

    typedef可以用于定义函数指针类型:

    【语法】
    typedef <返回类型> (*<函数类型名>)(参数表)
    typedef <返回类型> (<类名>::*<函数类型名>)(参数表)

    【用途】
    1、可以用来定义该函数类型的函数指针,就不用每次使用函数指针都要写一次函数原型了;
    2、有了类型名,就可以使用在容器里面,譬如map<int, 类型名>,用于实现灵活的函数调用。

    【示例】

    例1:
    typedef void (*PF)(int x);

    void func1(int x){ cout<<"func1:"<<x<<endl;}

    void func2(int x){ cout<<"func2:"<<x<<endl;}

    void main()
    {
      PF pFunc;    //声明一个函数指针只需要用PF类型名
      pFunc = func1;  //此处也可以使用pFunc = &func1;
      pFunc(38);
      pFunc = func2;
      pFunc(99);
    }

    -----------------------------------------------------------------------------------------------

    例2:
    class CUtil
    {
    public:
      CUtil();
      typedef void (CUtil::*pUFunc)(int);  //定义原型为void CUtil::func(int)的函数指针的别名为pUFunc
      map<int, pUFunc> funcMap;     //可以用做map容器的元素类型
      void laner(int x);
      void execute();
    };

    CUtil::CUtil()
    {
      funcMap[0] = &CUtil::laner;  //这里初始化map容器,关联数字0和函数laner
    }

    void CUtil::laner(int x)
    {
      cout<<"laner:"<<x<<endl;
    }

    void CUtil::execute()
    {
      (this->*funcMap[0])(38);   //调用map[0]关联的函数
      //注意1:这里必须使用this->,否则会有error C2171: “*”: “void (__thiscall CUtil::* )(int)”类型的操作  数非法的错误
      //注意2:这里必须使用*解引用,才能实现函数调用,否则会有error C2064: 项不会计算为接受 1 个参数的函数的错误
    }

    void main()
    {
      CUtil pUtil = new CUtil();
      pUtil->execute();
      (pUtil->*(pUtil->funcMap[0]))(38);  //与上一句等效,注意括号要用正确
    }

  • 相关阅读:
    异步加载图片
    彩票项目
    linux 多线程的分离和可链接属性
    C库中system和atexit和exit的使用
    C库中getenv函数
    mode|平均数|方差|标准差|变异系数|四分位数|几何平均数|异众比率|偏态|峰态
    radar chart
    植物基因组|注释版本问题|重测序vs泛基因组
    signals function|KNN|SVM|average linkage|Complete linkage|single linkage
    supervised learning|unsupervised learning
  • 原文地址:https://www.cnblogs.com/xiao0913/p/3799775.html
Copyright © 2011-2022 走看看