Как сохранить информацию о типе шаблона вектора - PullRequest
0 голосов
/ 25 ноября 2010

Я пытаюсь реализовать класс для сериализации (сейчас 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) или любой альтернативный метод для выполнения того, что я хочу сделать.

1 Ответ

0 голосов
/ 26 ноября 2010

FWIW этот ответ (от @Phillip) на связанный вопрос также отвечает на этот вопрос с небольшой настройкой.Если кто-то хочет, я могу поставить Soln.

...