我正在尝试将一个类从“普通”类转换为模板类,但我不理解正确的语法。下面是我开始的一个(非常简化的)示例。这是 Visual Studio 2010,C++,针对 x64 架构,Windows 7。
目标是将类 T 重写为模板来处理 TEntry 或新类 OtherTEntry,在概念上类似于 TEntry,具有相同的成员函数,但具有不同的数据成员。
我很感激关于如何最好地做到这一点的建议。如果可能的话,我想将头文件和实现文件分开。我特别关注对局部变量 T * 的引用,以及如何正确使用 sizeof()。
在文件 Th 中:
class T
{
T(void);
T(G *pGIn, const unsigned long s, char nIn);
~T(void);
// Member functions
public:
bool Expand(const unsigned long newS);
void Empty(void);
private:
G *pG;
char n;
unsigned long s;
int f;
TEntry *p;
};
在文件 TEntry.h 中:
class TEntry
{
// Constructors
public:
TEntry();
TEntry(int l);
// Member functions
public:
void Relocate(int delta);
private:
// Data members
int k;
TEntry *p;
};
在文件 T.cpp 中:
T::T()
{
p=NULL; s=0; pG=NULL;
Empty();
return;
}
T::T(G *pGIn, const unsigned long m, char nIn)
{
pG=pG; n=nIn;
return;
}
T::~T(void)
{
if(p!=NULL)
delete[] p;
return;
}
bool T::Expand(const unsigned long newS)
{
T *pBefore=p;
p=(T *)_realloc_dbg(p, newS*sizeof(T), _NORMAL_BLOCK,__FILE__,__LINE__);
s=newS;
return p!=NULL;
}
void T::Empty()
{
f=0;
return;
}
在文件 TEntry.cpp 中:
T::T()
{
}
T::T(int i)
{
k=i;
}
void T::Relocate(int delta)
{
k+=delta;
return;
}