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);

    输出结果:

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




  • 相关阅读:
    C#异常小知识
    Cisco路由器配置学习-ip accounting
    Sublime Text 3预览Markdown
    什么是permit-inside功能
    锐捷双出口
    思科双出口+策略路由+NAT
    github常见操作和常见错误
    网易注册页面知识点
    java,xml等注释删除,正则表达式使用123
    简单多线程是否安全判断
  • 原文地址:https://www.cnblogs.com/RealOnlyme/p/2397737.html
Copyright © 2011-2022 走看看