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!