Как выбрать переменную-член с параметром типа?
У меня есть объект кэширования, который кэширует несколько различных типов объектов, как показано ниже:
class Cache
{
public:
ObjectTable<ObjTypeA> m_objACache;
ObjectTable<ObjTypeB> m_objBCache;
ObjectTable<ObjTypeC> m_objCCache;
};
(Ужасным) способом, которым я сейчас использую кеш, является прямой доступ к свойствам класса кеша "m_objACache" и "m_objBCache" следующим образом:
Cache c;
c.m_objACache.getObjectWithid(objectBuffer, 1);
c.m_objACache.getObjectWithid(objectBuffer, 2);
c.m_objBCache.getObjectWithid(objectBuffer, 3);
так далее..
То, что я хотел бы иметь возможность сделать что-то вроде этого:
class Cache
{
public:
template <typename T>
void getObjectWithId(T &objectBuffer, int id)
{
ObjectTable<T>.getObjectWithId(objectBuffer, id);
}
};
Но очевидно, что это не работает, потому что, где я "ObjectTable<T>
«Мне нужно имя переменной, но я не могу шаблонизировать переменные класса - так есть ли способ, которым я могу это сделать? Или это будет так, если объявить все переменные и получить к ним доступ следующим образом:
class Cache
{
public:
void getObjectWithId(ObjTypeA &objectBuffer, int id)
{
m_objACache.getObjectWithId(objectBuffer, id);
}
void getObjectWithId(ObjTypeB &objectBuffer, int id)
{
m_objBCache.getObjectWithId(objectBuffer, id);
}
void getObjectWithId(ObjTypeC &objectBuffer, int id)
{
m_objCCache.getObjectWithId(objectBuffer, id);
}
protected:
ObjectTable<ObjTypeA> m_objACache;
ObjectTable<ObjTypeB> m_objBCache;
ObjectTable<ObjTypeC> m_objCCache;
};
Который кажется очень многословным ..
Каждый тип объекта, для которого можно использовать ObjectTable, имеет общий базовый класс, так что может быть какой-то другой способ сделать это, что неизбежно может привести к снижению производительности, но я надеюсь, что смогу найти лучший способ.
Спасибо!