0
私は直列化のためのクラスを実装しようとしています(今のところXML)。考えられるのは、派生したクラスはそのメンバーを基本クラスに登録でき、ベースはXMLの形式でメンバーを書くことができるということです。テンプレートベクトルの型情報を保存するには
コードは、これまでのところは良い、この
class IXMLINF
{
protected:
struct INFObj
{
union MemPtr
{
int* piMem;
char* pstrMem;
IXMLINF* pINFMem;
}
MemPtr memObj;
};
vec<INFObj*> m_INFObjVec;
void addMemToINF(int* piMem)
{
INFObj* pObj = new INFObj;
pObj->memObj.piMem = piMem;
m_INFObjVec.append(pObj);
}
void addMemToINF(char* pstrMem);
void addMemToINF(IXMLINF* pINFMem);
void writeToXML()
{
for_each_element_in_m_INFObjVec
{
//if int or char process to XML
//else if IXMINF call its writeToXML
}
}
}
ようになります。しかし、私はまた、XMLの型のベクトルを書くことができるようにしたい。 int型とcharの*それは簡単ですが、一般的な方法でIXMLINF派生クラスのベクトルのためにそれを行う方法(VECはVECは異なるタイプである)
1つの可能な方法は
<class T>void addMemToINF(vec<T*>* pXMem)
{
//T is a class derived from IXMLINF
void* pvMem = (void*)pXMem
//Somehow store type of T
Type = T
}
void writeToXML()
{
....
vec<Type*>* pVec = (vec<Type*>*)pvMem ;
}
私がするかもしれませんType informatio(Type = Tステップ)を格納する方法や、やりたいことを実行するための別の方法を提案することをお勧めします。