クラスを「通常の」クラスからテンプレート クラスに変換しようとしていますが、正しい構文がわかりません。以下は、私が始めているものの(非常に単純化された)例です。これは、x64 アーキテクチャ、Windows 7 を対象とした Visual Studio 2010、C++ です。
目標は、クラス T をテンプレートとして書き直して、TEntry または新しいクラス OtherTEntry (概念は TEntry に似ている) のいずれかを処理することであり、メンバー関数は同じですが、データ メンバーは異なります。
これを行う最善の方法についてアドバイスをいただければ幸いです。可能であれば、ヘッダー ファイルと実装ファイルを分けておきたいと思います。私は特に、ローカル変数 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;
}