【发布时间】:2011-03-26 05:25:48
【问题描述】:
我有一个缓存对象,它缓存了许多不同类型的对象,如下图所示:
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 可用于的每个对象类型都有一个公共基类,因此可能有其他一些方法可以做到这一点,这可能不可避免地涉及向下转换,但我希望我能找到更好的方法。
谢谢!
【问题讨论】:
标签: c++ design-patterns templates oop