C++类中使用表驱动
来源:互联网 发布:如何在淘宝网上买课件 编辑:程序博客网 时间:2024/06/14 05:58
表驱动是一种非常好的编程技巧,在代码中合理的使用表驱动能够有效的消除掉大片的if else以及switch case语句,并且能够在一定程度商提升代码的性能,因为
表驱动通常是使用了哈希,或者是查找树来做索引,相比较顺序的遍历要快。
这儿,给出一种在C++类中使用表驱动编程方法的例子。
假设你当前在实现一个不同协议的消息包处理工具,能够处理不同网络协议的消息包,TCP,UDP,SCTP等。
enum MsgType{ PROTO_TCP, PROTO_UDP, PROTO_SCTP, PROTO_NULL,};class Msg{public: int type; int size;};class MsgProc{public: MsgProc(); ~MsgProc(); int Proc(enum MsgType t, Msg* m);private: int TcpProc(Msg* m); int UdpProc(Msg* m); int SctpProc(Msg* m); int ProcError(Msg* m);private: typedef int (MsgProc::*proc)(Msg* m); struct tbl { enum MsgType msg_type; proc msg_proc; }; static struct tbl m_proc[];};
这儿使用了静态可变数组来存储表格,当然也可以使用map或者是其他的数据结构来实现。但是静态数组其实就是最简单的了(在索引量不多,并且比较简单的情况下)。
然后给出源程序:
#include <iostream>#include "msgproc.h"using std::cout;using std::endl;struct MsgProc::tbl MsgProc::m_proc[] = { {PROTO_TCP, &MsgProc::TcpProc}, {PROTO_UDP, &MsgProc::UdpProc}, {PROTO_SCTP, &MsgProc::SctpProc}, {PROTO_NULL, &MsgProc::ProcError},};MsgProc::MsgProc(){}MsgProc::~MsgProc(){}int MsgProc::TcpProc(Msg* m){ cout << "TcpProc:" << m->type << m->size << endl; return 0;}int MsgProc::UdpProc(Msg* m){ cout << "UdpProc:" << m->type << m->size << endl; return 0;}int MsgProc::SctpProc(Msg* m){ cout << "SctpProc:" << m->type << m->size << endl; return 0;}int MsgProc::ProcError(Msg* m){ cout << "Error:" << endl; return -1;} int MsgProc::Proc(enum MsgType t, Msg* m){ return (this->*m_proc[t].msg_proc)(m);}
这儿需要注意的是C++中对函数取地址的方式与C是不同的,调用表驱动函数的方式也需要注意一下。
0 0
- C++类中使用表驱动方案
- C++类中使用表驱动
- davinci 644X中UART1使用8250.c驱动注意
- 在驱动中使用链表
- 驱动中使用内核链表
- 驱动中使用资源
- mongodb的c驱动使用
- 驱动开发中,在C中使用C++的方法
- C-表驱动-代码
- Linux驱动中delayed_workqueue使用
- 驱动中使用class_device_create()…
- linux驱动中使用定时器
- 驱动中ioctl的使用
- 使用C语言和i2c-dev驱动
- Android内核驱动(linux内核驱动)中使用Completion
- 驱动中导出函数供其他驱动使用。
- 如何在VC中使用winpcap驱动
- Linux USB驱动中URB的使用
- 程序员必修的中文MOOC汇总
- Netflix是怎么火起来的
- 4-2-1 循环控制-判断素数
- Linux内核设计与实现 学习笔记(4)块I/O层
- JBPM显示流程图
- C++类中使用表驱动
- 数据平台调度系统的设计
- hoj 1081 Scramble Sort
- dell md3200i 磁盘阵列
- 守护进程与僵尸进程
- VS之动态库实现和调用
- 基于Android的计步器(Pedometer)的讲解(一)——Fragment页面跳转
- Leetcode -- 3sum
- 123茶楼,众筹...