c – 如何使用类型参数选择成员变量?
发布时间:2020-12-16 09:29:05 所属栏目:百科 来源:网络整理
导读:我有一个缓存对象,缓存许多不同类型的对象,如下所示: class Cache{public: ObjectTableObjTypeA m_objACache; ObjectTableObjTypeB m_objBCache; ObjectTableObjTypeC m_objCCache;}; 我目前正在使用缓存的(可怕)方式是直接访问缓存类属性“m_objACache”和
我有一个缓存对象,缓存许多不同类型的对象,如下所示:
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的每个对象类型都有一个共同的基类,因此可能还有其他一些方法可能会涉及向下转换,但我希望我能找到更好的方法. 谢谢! 解决方法
也许这样吗?
class Cache { // An "envelope" type which up-casts to the right ObjectTable<T> // if we have a type parameter T. struct ObjectTables : ObjectTable<ObjTypeA>,ObjectTable<ObjTypeB>,ObjectTable<ObjTypeC> {}; ObjectTables tables; public: template <typename T> void getObjectWithId(T &objectBuffer,int id) { // C++ does the work here ObjectTable<T> &o=tables; t.getObjectWithId(objectBuffer,id); } }; 此外,它很容易扩展.只需投入更多的ObjectTables<>如果你需要支持更多类型. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |