通过基类找继承类
来源:互联网 发布:好学近乎知 pdg 编辑:程序博客网 时间:2024/06/06 15:42
背景
在查找函数的定义的时候,发现了基类定义的该函数有两个继承类,都定义了该函数,不知道程序使用的是哪一个?
程序调用:
filter->isInterested(p) == -1基数定义:
class Filter{public: virtual int isInterested(const Packet& p){return -1;} HttpCallBack getcb() { if(ix <0 || ix >= (int)cbs.size()) return NULL; return cbs[ix]; }protected: Filter(){} Filter(std::vector<std::string> urls0,std::vector<HttpCallBack> cbs0) :urls(urls0),cbs(cbs0),ix(0){} std::vector<std::string> urls; std::vector<HttpCallBack> cbs; int ix;};
两个继承类定义:
class GetFilter : public Filter{public: GetFilter(HttpCallBack cb) { cbs.push_back(cb); } int isInterested(const Packet& p) { if(0 == strncmp((const char*)p.data, "GET", 3)) return ix = 0;return ix = -1; } };class UrlFilter : public Filter{public: UrlFilter(std::vector<std::string> interestedUrls, std::vector<HttpCallBack> callbacks ) :Filter(interestedUrls,callbacks) { } int isInterested(const Packet& p) { std::vector<std::string>::iterator it = find_if( urls.begin(), urls.end(), IsInterested(p) ); if( urls.end() != it) { //cout << *it << endl; return ix = it - urls.begin(); } else { return ix = -1; } }private: class IsInterested { public: IsInterested(const Packet& p) { packetData.assign((char*)p.data, (size_t)p.dsize); } bool operator()(const string& url) { return boost::starts_with(packetData, url); } private: string packetData; };};
解决思路
在函数初始化的时候,会使用继承类来定义。查找代码,可以看到如下内容
static UrlFilter uf(vector<string>(travelUrls, travelUrls+ sizeof(travelcbs)/sizeof(HttpCallBack) ), vector<HttpCallBack>(travelcbs, travelcbs+sizeof(travelcbs)/sizeof(HttpCallBack) ) );HttpParser hpTravel(&uf);bool AnaTravel(PacketInfo* pktInfo){ return hpTravel.parse(pktInfo);}
由此确定使用的是UrlFilter。
阅读全文
0 0
- 通过基类找继承类
- 通过继承类实现
- 方案一:通过继承TextBoxBase类实现
- 通过继承手段修改类功能
- Java通过继承Thread类实现多线程
- 通过继承制作简单的控件类
- 通过继承Thread类实现多线程
- NodeJs通过util.inherits实现类继承
- 通过继承Thread类实现多线程
- Qt通过继承生成自定义窗口类
- java 通过继承 Thread 类实现多线程
- 通过继承进行设计
- JAVA中通过继承Thread类来创建线程类
- 通过类向导添加继承自定义类的方法
- 通过继承ServiceHost编写简化MEX编程的类
- Android 通过继承TextView类自定义字体默认颜色
- 多线程(二)——通过继承Thread类创建线程
- 第十一周--通过继承拥有基类的资源
- ssh 免密码登录
- kafka配置详解
- css3选择器--层次选择器
- js笔记2之JavaScript标识符、数据类型及其转换
- windows 7系统安装虚拟机及在虚拟机上安装ubuntu(linux)操作系统
- 通过基类找继承类
- 对话框-QDialog
- 常用shell
- ASP.NET 使用类对数据库进行增删改查操作
- HTML超出部分用省略号显示··· text-overflow
- Java的格式化输出
- Blurry Box加密技术使用的7种方法
- Scale-aware Fast R-CNN for Pedestrian Detection(2015)
- C语言文件流关于fread,fwrite多读的问题(yuxinsong)