我想將一個類從「普通」類轉換爲模板類,但我不明白正確的語法。下面是一個(大大簡化)我開始的例子。這是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