我想将一个类从“普通”类转换为模板类,但我不明白正确的语法。下面是一个(大大简化)我开始的例子。这是Visual Studio 2010,C++,面向x64体系结构,Windows 7。如何将“正常”C++类转换为模板?
目标是将类T重写为模板,以处理TEntry或类TEntry的新类,OtherTEntry,具有相同的成员函数,但具有不同的数据成员。
我很感谢关于如何做到这一点的建议。如果可能的话,我想将头文件和实现文件分开。我特别坚持对局部变量T *的引用,以及如何正确使用sizeof()。
在文件钍:
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;
}
调用类T是一个非常糟糕的选择。请张贴您尝试过的内容,很难说出您没有展示时做错了什么。 – Mat 2013-02-24 08:00:05
是否有任何不使用'std :: vector'的理由? – 2013-02-24 08:45:30
请放心,我的实际班级并没有被命名为T.我现在有一个完整的工作对班,但是我只显示了我的代码的一小部分,刚够问我的问题。 – Woody20 2013-02-24 17:47:52