zoukankan      html  css  js  c++  java
  • 结合回调函数介绍下泛型函数

    其实泛型说白了,就是模板。泛型只不过是学称。

    下述代码通过函数指针演示了回调函数。测试代码中根据传入函数名作为实参,实现不同的函数调用。

    #ifndef _POINT__H_  
    #define _POINT__H_
    typedef int (*Calc)(int,int);

    int Sub(int a,int b);
    int Minus(int a,int b);
    void MyPointFun(Calc fun,int a,int b);

    #endif/*_POINT__H_*/
    View Code
    //PointTest.cpp  
    #include "PointTest.h"
    #include<stdio.h>
    int Sub(int a,int b)
    {
    return a+b;
    }
    int Minus(int a,int b)
    {
    return a-b;
    }

    void MyPointFun(Calc fun,int a,int b)
    {
    printf("a:%d,b:%d,rlt:%d\n",a,b,fun(a,b));
    }

    测试代码:

    MyPointFun(Sub,1,2);  
    MyPointFun(Minus,1,2);

    输出结果:

    实际传入数据实参类型不一定非得是int,我们将其改成使用函数模板的方式实现:

    View Code
    #define _POINT__H_  
    //没有再使用typedef 定义函数指针,是使用typedef定义模板类的函数指针没有编译成功
    //模板函数的话定义和声明在VC下不能分开写,因此都放头文件中了
    template<class T>
    T Sub(T a,T b)
    {
    return a+b;
    }
    template<class T>
    T Minus(T a,T b)
    {
    return a-b;
    }
    template<class T>
    void MyPointFun(T (*Calc)(T,T),T a,T b)
    {
    printf("a:%d,b:%d,rlt:%d\n",a,b,Calc(a,b));
    }
    #endif/*_POINT__H_*/

    测试代码:

    MyPointFun(Sub<int>,(int)1,(int)2);  
    MyPointFun(Sub<char>,(char)255,(char)255);
    MyPointFun(Minus<int>,(int)1,(int)2);

    输出结果:

    我们看到,使用函数模板方式一样可以实现回调函数。注意的是,函数模板中声明和定义要放在一起,具体可以参见这里




  • 相关阅读:
    第五周进度条
    《掌握需求过程》阅读笔记01
    第三周进度条
    问题账户需求分析
    2016年秋季阅读个人计划
    梦断代码阅读笔记03
    软件工程概论课程总结
    Python爬取上交所一年大盘数据
    Python爬取6271家死亡公司数据,看十年创业公司消亡史
    python:王思聪究竟上了多少次热搜?
  • 原文地址:https://www.cnblogs.com/RealOnlyme/p/2397737.html
Copyright © 2011-2022 走看看