如何保存模板矢量的类型信息

时间:2010-11-25 04:56:57

标签: templates vector implementation idioms

我正在尝试实现一个用于序列化的类(现在是XML)。我们的想法是,任何派生类都可以使用基类注册其成员,而base可以以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不同的类型)

一种可能的方式可能是

<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 = T step)或任何其他方法来执行我想要做的事情的建议。

1 个答案:

答案 0 :(得分:0)

FWIW这个answer(由@Phillip提供)相关问题也可以通过一些调整来回答这个问题。如果有人想要,我可以把溶剂。