지도에 여러 유형의 객체를 저장하고 싶습니다.이 솔루션을 생각해 냈습니다. 각 객체의 유형을 알아야하므로 boost :: any을 사용할 수 없습니다. 이 작업을 수행 할 수있는 더 좋은 방법이 있습니까? 아니면이 솔루션을 사용할 수 있습니까?지도에 여러 유형 저장
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;
}
}
실행을 시도 했습니까? 또한'void main'이 존재하지 않습니다 – TemplateRex
확실히 시도했는데, 그것은 Visual Studio에서 작동합니다. – JOkle
의견을 묻습니다. 당신이 그것을 돌리면, 컴파일러는 그것을 받아 들였다. 그게 충분하니? – CAB