【问题标题】:How to save type information of template vector如何保存模板向量的类型信息
【发布时间】:2011-05-15 12:05:40
【问题描述】:

我正在尝试实现一个用于序列化的类(现在是 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 是不同的类型)

一种可能的方法是

<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 ;

}

我将不胜感激有关如何存储类型信息(类型 = T 步骤)或任何替代方法来做我想做的事情的任何建议。

【问题讨论】:

    标签: templates vector implementation idioms


    【解决方案1】:

    FWIW 这个answer (by @Phillip) 到一个相关问题也通过一些调整回答了这个问题。如果有人要,我可以把解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-31
      • 2019-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-07
      相关资源
      最近更新 更多