(1)目的:为了实现两个模块之间的通信(这两个模块没有任何依赖关系)

(2) C语言中的函数指针

int (*a)(int q) = 0; //声明一个函数指针a,初始值设为0
//.
//.
//.
int MyFunction (int q) {}
a=MyFunction;
//接下来a就具有了MyFunction的功能了
int m= a(12);

(3)C++的函数指针

C++与C语言函数指针区别是指向调用类成员函数

class A{
public:
int Mymethod(int q);
}; int (A::*k)(int q)=0;//前面要指定特定的类
k=&A::Mymethod; //对k指针的赋值
A a;
a.*k(12); //k指针的调用 总的来说C++要用特定的函数指针指向类的成员函数,只能专门为一个类服务

(4)什么是回调

举个例子
在我们数据结构中,经常用到快排函数,然而,通常我们还要在写一个比较函数。
因为我们不知道,比较的这些数是整形的,字符型,浮点数
所以一般是在函数参数列表中列一个回调函数地址,通知调用者
他们要自己准备一个比较大小。排序函数借调用者提供的比较函数来比较大小,借函数指针传递参数,就可以不用管比较的数据类型。 如快排函数qsort()
快排函数有4个参数, 分别是要 数组的索引,数组的长度, 数组的一个单位的字节数 和 比较函数。
其中这个比较函数需要我们自己实现。
然后通过qsort调用它。 上述过程涉及被调用者调用调用者的函数,成为回调。

(5)ns3 回调的机制

API ns3主要提供Callback类API接口来为用户提供服务  (分为两部 1用给定的签名声明回掉的类型 2回调实例化)

—针对静态函数

static double
CbOne(double a,double b)
{
std::out<<"a="<<a<<"b="<<b<<std::endl;
return a;
}
int main(int argc,char *argv[])
{
//返回类型 double
//第一个参数 double
//第二个参数 double
Callback<double,double,double> one; //回掉实例化,第一个参数是返回值,第二和第三是参数
one = MakeCallback(&CbOne);//讲回调one,通过API MakeCallback()与相应的函数进行匹配
NS_ASSERT(!one.IsNull());//检查一下回调one是否为空
double retone;
retone = one(10.0,20.2);//此时one的功能和CbOne的功能是一样的
}

—针对类成员函数

class Mycb{
public:
int CbTwo(double a){
std::out<<"a="<<a<<std::endl;
return -5;
}
} //返回类型 int
//参数 double
Callback<int,double> two;
Mycb cb;
//创建一个回调,并让他指向Mycb::CbTwo
two = MakeCallback(&Mycb::CbTwo,&cb);//与静态函数差别多一个参数,即实例化的cb的地址
//调用的时候也就是调用cb的CbTwo函数
NS_ASSERT(!two.IsNull());//判断回调two不为空
int retTwo;
retTwo = two(10.0);
NS_ASSERT(retTwo == -5);
return 0;
}

—针对Null的回调

Two = MakeNullCallback<int,double>(); //构建空的回调
int retTwo = Two(10.2);

疑惑:现在还没有感觉到空回调的意义所在

ns3 回调机制的更多相关文章

  1. JAVA回调机制(CallBack)详解

    序言 最近学习java,接触到了回调机制(CallBack).初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义.当然了,我在理解了回 ...

  2. JAVA回调机制解析

    一.回调机制概述     回调机制在JAVA代码中一直遇到,但之前不懂其原理,几乎都是绕着走.俗话说做不愿意做的事情叫做突破,故诞生了该文章,算是新年的新气象,新突破!     回调机制是什么?其实回 ...

  3. Java:回调机制

    引用:http://blog.sina.com.cn/s/blog_48cf38890100go6x.html 1.  什么是回调函数    回调函数(callback Function),顾名思义, ...

  4. 深入浅出: Java回调机制(异步)

    一.什么是回调 回调,回调.要先有调用,才有调用者和被调用者之间的回调.所以在百度百科中是这样的: 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调和异步调用. 回调 ...

  5. 【基础】利用thrift实现一个非阻塞带有回调机制的客户端

    假设读者对thrift有一定了解. 客户端有时需要非阻塞的去发送请求,给定服务端一个请求,要求其返回一个计算结果.但是客户端不想等待服务端处理完,而是想发送完这个指令后自己去做其他事情,当结果返回时自 ...

  6. JAVA 回调机制(callback)

    序言 最近学习java,接触到了回调机制(CallBack).初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义.当然了,我在理解了回 ...

  7. paip.函数方法回调机制跟java php python c++的实现

    paip.函数方法回调机制跟java php python c++的实现 作者Attilax 艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http:// ...

  8. java模板和回调机制学习总结

    最近看spring的JDBCTemplete的模板方式调用时,对模板和回调产生了浓厚兴趣,查询了一些资料,做一些总结. 回调函数: 所谓回调,就是客户程序C调用服务程序S中的某个函数A,然后S又在某个 ...

  9. 浅谈Java回调机制

    像许多网上介绍回调机制的文章一样,我这里也以一个现实的例子开头:假设你公司的总经理出差前需要你帮他办件事情,这件事情你需要花些时间去做,这时候总经理肯定不能守着你做完再出差吧,于是就他告诉你他的手机号 ...

随机推荐

  1. Linux下onvif客户端获取ipc摄像头 GetStreamUri:rtsp地址(h264、h265)

    GetStreamUri:rtsp地址 鉴权:但是在使用这个接口之前是需要鉴权的.ONVIF协议规定,部分接口需要鉴权,部分接口不需要鉴权,在调用需要鉴权的接口时不使用鉴权,会导致接口调用失败.实现鉴 ...

  2. c++ 绘制方框

    知识点: GetStdHandle函数 FillConsoleOutputCharacter函数 SetConsoleCursorPosition函数 system函数 一. GetStdHandle ...

  3. Python day1 ---python基础1.1

    1.模块初识2..pyc是个什么鬼?3.数据类型初识 4.数据运算5.入门知识拾遗 1.模块初识 sys模块 import sys print(sys.path) #打印环境变量 'D:\\Pycha ...

  4. eclipse项目转移至IDEA与IDEA tomcat报错(idea自带tomcat版本太高)与war包部署到win服务器与idea提交git的总结

    eclipse导出项目到idea时,不要导出target: idea打开eclipse项目后,出现junit找不到的问题,原因是jar包缺失,而maven配置的低版本的junit也显示找不到,解决办法 ...

  5. SSIS 数据流的错误输出

    数据流任务对错误的处理,和控制流不同,在数据流中,主要是对于错误行的处理,一般通过Error Output配置. 1,操作失败的类型:Error(Conversion) 和 Truncation. 2 ...

  6. docker创建image方法以及常用指令介绍

    docker -help    # 显示帮助 docker COMMAND -help    # 帮助信息更详细 docker start “容器名称”    # 启动一个或多个容器 docker s ...

  7. Java JDK下载安装及配置

    下载JDK(Java Development Kit),所有的Java程序都依赖他. 下载地址 www.oracle.com  直接下载 安装JDK如图(傻瓜式安装,下一步下一步):   安装完成后 ...

  8. shell 本地接口自动化

    一.基于http/https的接口 一般情况下,当前大多公司在做接口自动化的时候都会使用一些工具:比如:postman/jmeter/python自研开发接口平台... 以上的情况,都是在源码与测试使 ...

  9. Your requirements could not be resolved to an installable set of packages

    使用composer下载laravel安装程序时(composer global require "laravel/installer"),报截图中的错误. 解决: 根据提示可知, ...

  10. 配置centos7来支持xshell远程访问和xftp传输文件

    前提: 首先需要一台已装有centos7的电脑(虚拟机的配置这里不说明,这里用的是物理机) 背景: 在工作中访问linux的环境通常需要Xshell等终端软件,通过配置静态IP远程服务器进行管理开发. ...