Как выбрать переменную-член с параметром типа?

У меня есть объект кэширования, который кэширует несколько различных типов объектов, как показано ниже:

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, имеет общий базовый класс, так что может быть какой-то другой способ сделать это, что неизбежно может привести к снижению производительности, но я надеюсь, что смогу найти лучший способ.

Спасибо!

Ответы на вопрос(2)

Ваш ответ на вопрос