2010-11-25 5 views
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ステップ)を格納する方法や、やりたいことを実行するための別の方法を提案することをお勧めします。

答えて

0

FWIW answer(@Phillipによる)関連する質問にも少し微調整してこの質問に答えます。もし誰かが望むなら、私はそれを置くことができます。

関連する問題