模板类对普通类的继承
来源:互联网 发布:淘宝店小成本运营策略 编辑:程序博客网 时间:2024/04/29 08:24
前几天需要用到这样一种数据结构,如下:
class BaseReg
{
public:
BaseReg(){Datalen=0;}
INT8U Length(){return Datalen;}
protected:
INT8U Datalen;
INT8U Data[8];
};
此结构用于存储寄存器数据,但是数据长度固定,以前8个字节够用了,但是现在长度最多的有20个字节,如何解决此问题。如果将结构中Data数组直接扩展到20字节,会浪费很多空间。一开始想到了用模板,如下:
template<INT8U DATA_LEN>
class BaseReg
{
public:
private:
INT8U Data[DATA_LEN];
INT8U Datalen;
};
这样可以根据不同数据长度定义不同对象如:
BaseReg<4> br4;
BaseReg<6> bt6;
但是BaseReg<4>和BaseReg<6>不是同一类型,不能存入同一个数组中,这样要在各种寄存器中进行搜索就很困难了。于是想到如下解决方案:
class BaseReg
{
public:
BaseReg(){Datalen=0;}
INT8U Length()const{return Datalen;}
virtual void SetData(INT8U* data)=0;
virtual INT8U GetData(INT8U i)const=0;
virtual void PrintData()const=0;
protected:
INT8U Datalen;
};
template<INT8U DATA_LEN>
class TRegData:public BaseReg
{
public:
TRegData()
{
//memset(this,0x00,sizeof(*this));//此行语句将虚函数表指针也置0了,故要注释掉
Datalen=DATA_LEN;
}
void SetData(INT8U* data)
{
memcpy(Data,data,Datalen);
}
INT8U GetData(INT8U i)const
{
return Data[i];
}
virtual void PrintData()const
{
for (INT8U i=0; i<Datalen; ++i)
{
printf("%02X ",Data[i]);
}
printf("/n");
}
private:
INT8U Data[DATA_LEN];
};
于是可以采用如下使用方法:
BaseReg* bg[5];
TRegData<4> tr4;
TRegData<5> tr5;
bg[0]=&tr4;
bg[1]=&tr5;
于是对bg[5]数组进行搜索即可。
- 模板类对普通类的继承
- C++模板类的继承2:普通类继承模板类
- 模板类的继承
- 类模板的继承
- 模板类的继承
- 模板类的继承
- 模板类的继承
- 模板类的继承
- 模板类的继承
- 模板类的继承
- 模板类的继承
- 模板类的继承
- 模板类的继承
- 模板类的继承
- 模板类的继承
- 模板类的继承
- 模板类的继承
- 模板类的继承
- Displaytag (partialList ="true") 分页例子子
- 用displaytag展现大数据量数据
- CET6
- Qtopia安装简要入门[转]
- 约当产量法的计算
- 模板类对普通类的继承
- 学习术——“我是说给自己听的”
- oracle函数
- eXtremeTable之一(分页实现)
- 欺师灭祖,只为真理!百炼之剑,为挫折而生!
- 宫崎骏作品集
- 域名解析
- aspnetpager用法
- ado.net 如何读取 excel