我有一个资源管理类,叫 ResMgr,里面要管理很多不同类型的资源,ResA、ResB、ResC,这些资源都是从文件中初始化的,都继承类同一个基类 ResBase,每添加一个新的资源 ResX,我都要加同样的代码
private:
ResX res_x_;
public:
const ResX& res_x() const { return res_x_; }
res_x_.init("path");//这个 path 对不同的资源来说是不一样的
有没有什么方式一口气把这三件事一起做了啊,我现在已经有 30 多种资源了,感觉一样的代码写了无数遍……
最好是能在 c++11 标准下解决,更高级的语法暂时不支持
我描述的有问题……
ResBase<ResType>就用的是模板,很早之前写的代码了,最近感觉不好用,一下没反应过来说错了
ResX不是一个资源,也是一个资源管理类,都自己管理了一些属于他的资源,相当于我是在ResMgr里面又去管理了很多ResXMgr。
每新增一类资源,我都需要在ResMgr里面添加一个新的ResXMgr类型的成员,然后从文件里面把他初始化好,再添加一个访问函数
1
karllynn 2019-03-25 17:23:56 +08:00
emmm 你可以写一个代码生成器…
|
2
MrVito OP @karllynn 不行……因为有一些资源的逻辑是不一样的,大部分的资源都只要提供一个访问函数就行了,有一些还需要提供一些和业务相关的查找方法。
|
3
karllynn 2019-03-25 17:48:34 +08:00
那你把思路反过来,资源管理类这边写个注册函数,然后各种资源把自己注册到管理类
|
4
v2byy 2019-03-25 17:49:12 +08:00 via iPhone
模版考虑一下?为什么非要放在一个管理类中?
|
5
jxf2008 2019-03-25 17:57:17 +08:00
不是很懂楼主的意思
你的那些 ResA、ResB、ResC 能否放入 Map 中,如果可以,只要两个函数就可以解决了 add("类名",ResX), get("类名") ResMgr 类李建立一个 Map 管理这些资源类,这些资源类也可以随时添加改删 |
6
v2mm 2019-03-25 17:59:26 +08:00
这种一般考虑用模板
|