我想創建一個Container類,我可以通過使用該對象成員變量作爲其標識符從容器中檢索對象。 但我得到一個編譯錯誤,因爲我想存儲指針(?)/參照對象的成員變量存儲對一個不同類的對象成員變量的引用
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
這是什麼:'集合 foodCol(&FoodItem :: name);'應該是什麼意思?什麼地址? –
2011-05-14 06:06:02
我想你的意思是&FoodItem :: name是什麼意思,我指的是結構FoodItem的成員變量名稱。因此,我創建了一個Collection並且我希望能夠通過使用它們的名稱作爲關鍵字(標識符)來訪問它的FoodItem元素 – user593747 2011-05-14 06:09:19