Estoy tratando de crear una clase de contenedor en el que puedo recuperar un objeto del contenedor mediante el uso de que los objetos variable miembro como su identificador. pero me da un error de compilación porque estoy tratando de almacenar un puntero (?)/Referencia a la variable miembro de objetostienda una referencia a una variable miembro de objetos con una clase diferente
template <typename Object>
class Container
{
private:
template <typename dataType>
dataType Object::* memberVariable; // error here "data member 'memberVariable' cannot be a member template"
template <typename dataType>
std::map <dataType, Object*> instanceVarMap; // what would be more efficient; a Map or unordered_map? I heard that
std::map <unsigned int, Object*> instanceIntMap; // ...unordered_maps use more memory & Maps are better when integers are the keys
public;
template <typename dataType>
Collection(dataType Object::*nMemberVariable)
{
memberVariable = nMemberVariable;
}
template <typename dataType>
Object* operator[] (dataType nParam)
{
// do I need to check whether the element already exists or does
// stl already do this for me?
if (instanceVarMap.find(nParam) == instanceVarMap.end())
{
return NULL;
}
return instanceVarMap[ nParam ];
}
Object* operator[] (unsigned int nParam)
{
if (instanceIntMap.find(nParam) == instanceIntMap.end())
{
return NULL;
}
return instanceIntMap[ nParam ];
}
void store(Object* o)
{
if (o==NULL || instanceMap.contains(o->memeberVariable) != instanceMap.end()) { return; }
instanceIntMap.insert(o->ID, o);
instanceVarMap.insert(o->memberVariable, o); // is this the correct way I get the objects member variable? o->memberVariable
}
};
// I am doing this so I can use the class like so
struct FoodItem
{
unsigned int ID;
string name;
double price;
};
Collection <FoodItem*> foodCol(&FoodItem::name);
// after storing some FoodItems in foodCol, I can retreive a FoodItem either
// by their ID or their name
FoodItem* f = foodCol["coffee"]; // find FoodItem by their member variable 'name'
FoodItem* g = foodCol[1]; // find FoodItem by their ID var
¿Qué es esto: 'Colección foodCol (& FoodItem :: name);' supposed a mean? Dirección de qué exactamente? –
Supongo que te refieres a lo que significa & FoodItem :: name, me refiero a la estructura del nombre de variable de miembro de FoodItem. Así que estoy creando una Colección y quiero poder acceder a sus elementos de FoodItem usando sus nombres como claves (identificadores) – user593747