Como seleciono uma variável de membro com um parâmetro de tipo?

Eu tenho um objeto de cache que armazena em cache vários tipos diferentes de objetos, conforme ilustrado abaixo:

class Cache
{
public:
    ObjectTable<ObjTypeA> m_objACache;
    ObjectTable<ObjTypeB> m_objBCache;
    ObjectTable<ObjTypeC> m_objCCache;
};

A maneira (horrível) de usar o cache no momento é acessar diretamente as propriedades da classe de cache "m_objACache" e "m_objBCache" como este:

Cache c;
c.m_objACache.getObjectWithid(objectBuffer, 1);
c.m_objACache.getObjectWithid(objectBuffer, 2);
c.m_objBCache.getObjectWithid(objectBuffer, 3);

etc ..

O que eu gostaria de poder fazer é algo como isto: -

class Cache
{
public:
    template <typename T>
    void getObjectWithId(T &objectBuffer, int id)
    {
        ObjectTable<T>.getObjectWithId(objectBuffer, id);
    }
};

Mas, obviamente, isso não funciona, porque onde eu tenho "ObjectTable<T>"Eu preciso de um nome de variável, mas não posso modelar variáveis de classe - então existe uma maneira de fazer isso? Ou será um caso se declarar todas as variáveis e acessá-las assim:

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;
};

O que parece muito detalhado ..

Cada tipo de objeto para o qual uma ObjectTable pode ser usada possui uma classe base comum; portanto, pode haver outra maneira de fazer isso que possa envolver inevitavelmente downcasting, mas espero encontrar uma maneira melhor.

Obrigado!

questionAnswers(2)

yourAnswerToTheQuestion