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());
所以我想我的问题是:是否有更好的方法来保存指向通用类型的指针,这些类型不需要用户进行明确的向下转换?我觉得有一种模板化的做法,但我没有看到它.此外,我创建了这个界面,以便客户可以在需要时轻松地在测试中模拟它.
谢谢.
解决方法is there a better way of holding pointers to generic types that don’t require explicit downcasts from the user?
没有.
要么你使用经典的OO,a.k.a.运行时多态性.然后你会遇到基类接口,或者你必须作弊和转发.或者你使用模板,a.k.a.编译时多态.然后,您将在编译时绑定到单个资源类型.
有一些方法可以模糊两者之间的边界(例如,boost :: any),但基本上这些是你必须决定的两个.
总结以上是内存溢出为你收集整理的在C中,如何使用泛型类型的映射避免显式的向下转换?全部内容,希望文章能够帮你解决在C中,如何使用泛型类型的映射避免显式的向下转换?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)