Je veux stocker plusieurs types d'objets dans une carte, et je suis venu avec cette solution. Je dois connaître le type de chaque objet, donc je ne peux pas utiliser boost :: any. Y a-t-il un meilleur moyen de le faire, ou est-ce une solution acceptable?plusieurs types Stockage sur la carte
enum eType
{
TYPE_STRING,
TYPE_NUMBER,
};
class CType
{
public:
int GetType() { return m_Type; }
protected:
int m_Type;
};
template <typename T>
class CData : public CType
{
public:
CData(const T & rData, int iType)
{
m_Type = iType;
m_Data = rData;
}
T & GetData() { return m_Data; }
private:
T m_Data;
};
std::map<unsigned long, CType *> map_Data;
void main()
{
// Create a new data with TYPE_NUMBER
CData<short> data(32767, TYPE_NUMBER);
// Add it to the map
map_Data[0] = &data;
// Get the type
switch (map_Data[0]->GetType())
{
case TYPE_NUMBER:
{
// Cast the first element to CData
CData<short> * pField = (CData<short> *)map_Data[0];
// Print the data
printf("Data: %d\n", pField->GetData());
}
break;
case TYPE_STRING:
{
// Cast the first element to CData
CData<std::string> * pField = (CData<std::string> *)map_Data[0];
// Print the data
printf("Data: %s\n", pField->GetData().c_str());
}
break;
}
}
avez-vous essayé de l'exécuter? aussi 'void main' n'existe pas – TemplateRex
Bien sur j'ai essayé, ça marche en studio visuel. – JOkle
Vous demandez une opinion. Si vous l'avez exécuté, le compilateur l'a accepté. Est-ce suffisant? – CAB