ns3 回调机制
(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 回调机制的更多相关文章
- JAVA回调机制(CallBack)详解
序言 最近学习java,接触到了回调机制(CallBack).初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义.当然了,我在理解了回 ...
- JAVA回调机制解析
一.回调机制概述 回调机制在JAVA代码中一直遇到,但之前不懂其原理,几乎都是绕着走.俗话说做不愿意做的事情叫做突破,故诞生了该文章,算是新年的新气象,新突破! 回调机制是什么?其实回 ...
- Java:回调机制
引用:http://blog.sina.com.cn/s/blog_48cf38890100go6x.html 1. 什么是回调函数 回调函数(callback Function),顾名思义, ...
- 深入浅出: Java回调机制(异步)
一.什么是回调 回调,回调.要先有调用,才有调用者和被调用者之间的回调.所以在百度百科中是这样的: 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调和异步调用. 回调 ...
- 【基础】利用thrift实现一个非阻塞带有回调机制的客户端
假设读者对thrift有一定了解. 客户端有时需要非阻塞的去发送请求,给定服务端一个请求,要求其返回一个计算结果.但是客户端不想等待服务端处理完,而是想发送完这个指令后自己去做其他事情,当结果返回时自 ...
- JAVA 回调机制(callback)
序言 最近学习java,接触到了回调机制(CallBack).初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义.当然了,我在理解了回 ...
- paip.函数方法回调机制跟java php python c++的实现
paip.函数方法回调机制跟java php python c++的实现 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http:// ...
- java模板和回调机制学习总结
最近看spring的JDBCTemplete的模板方式调用时,对模板和回调产生了浓厚兴趣,查询了一些资料,做一些总结. 回调函数: 所谓回调,就是客户程序C调用服务程序S中的某个函数A,然后S又在某个 ...
- 浅谈Java回调机制
像许多网上介绍回调机制的文章一样,我这里也以一个现实的例子开头:假设你公司的总经理出差前需要你帮他办件事情,这件事情你需要花些时间去做,这时候总经理肯定不能守着你做完再出差吧,于是就他告诉你他的手机号 ...
随机推荐
- Scala(四):对象
对象:Object 1.单例对象 2.伴生对象 3.扩展类或特质的对象 4.apply方法 5.应用程序对象 6.枚举1.单例对象 Scala中没有你静态方法或静态字段,可以用object这个语法结构 ...
- mysql-5.7.12-winx64 安装
之前安装mysql时未做总结,换新电脑,补上安装记录,安装的时候,找了些网友的安装记录,发现好多坑 1.mysql-5.7.12-winx64.zip下载官方下载地址:http://dev.mysql ...
- JavaWeb总结(四)
使用Servlet发送服务器端响应信息 Servlet API中定义一个专门的接口类javax.servlet.http.HttpServletResponse用于创建HTTP响应,包括HTTP协议的 ...
- 洛谷 P1350 车的放置
洛谷 P1350 车的放置 题目描述 有下面这样的一个网格棋盘,a,b,c,d表示了对应边长度,也就是对应格子数. 当a=b=c=d=2时,对应下面这样一个棋盘 要在这个棋盘上放K个相互不攻击的车,也 ...
- day1 UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 2490: illegal multibyte sequence 错误提示
get方式得到网页的信息 #coding=utf-8 #pip install requests #直接get到网页的信息 import requests from bs4 import Beauti ...
- CF908G New Year and Original Order
题面 题意翻译 给定$n<=10^{700}$,问$1$到$n$中每个数在各数位排序后得到的数的和.答案$mod\;10^9+7$. 题解 考虑设$f[i][j][k][0/1]$表示前$i$位 ...
- 【LG3245】[HNOI2016]大数
[LG3245][HNOI2016]大数 题面 洛谷 题解 60pts 拿vector记一下对于以每个位置为右端点符合要求子串的左端点, 则每次对于一个询问,扫一遍右端点在vector里面二分即可, ...
- python之shutil模块详解
shutil模块 -- --High-level file operations 高级的文件操作模块. os模块提供了对目录或者文件的新建/删除/查看文件属性,还提供了对文件以及目录的路径操作.比如 ...
- 虚拟机下安装cad2006和南方cass7.0
本人电脑是win10系统,装了一个cad2014,cad2014没有与之匹配的cass版本,但cad2014也有用途,于是上网找两个cad版本都安装的教程,发现一个比较好的办法就是安装虚拟机,在虚拟机 ...
- Loadrunner安装使用入门
1. Loadrunner11安装指南 1)支持的Windows环境 2)安装 开始安装时会提示需要以下软件: .NET Framework v3.5 SP1 Microsoft WSE 2.0 SP ...