在C中,如何使用泛型类型的映射避免显式的向下转换?
这有点人为,但我说我有这样的类接口:
class IResource; class IResourceContainer { public: virtual ~IResourceContainer() {} virtual void AddResource(const std::string& rStrName,std::auto_ptr<IResource> apResource)=0; virtual IResource& GetResource(const std::string& rStrName)=0; }; 我有一个这个类的实现,它包含一个IResource类型的字符串映射.如果我要像这样添加我自己的资源: container.AddResource("foo",std:auto_ptr<IResource>( new CFooResource); 然后检索资源引用 CFooResource& fooResource = container.GetResource(); // error 这不会编译因为我需要将IResource转发到CFooResource.我想通过让GetResource获取一个模板参数来隐藏它,这个参数在内部向下转换类型,但很明显,模板和纯接口不会生成.我目前的替代方法是在CastResource函数中隐藏转换,该函数调用boost :: polymorphic_downcast,但我仍然不满意客户端需要转换资源的想法. 例如: CFooResource& fooResource = CastResource<CFooResource&>(container.GetResource()); 所以我想我的问题是:是否有更好的方法来保存指向通用类型的指针,这些类型不需要用户进行明确的向下转换?我觉得有一种模板化的做法,但我没有看到它.此外,我创建了这个界面,以便客户可以在需要时轻松地在测试中模拟它. 谢谢. 解决方法
没有. 有一些方法可以模糊两者之间的边界(例如,boost :: any),但基本上这些是你必须决定的两个. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |