V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
MrVito
V2EX  ›  问与答

请问大佬一个关于 c++资源管理类的问题

  •  
  •   MrVito · 2019-03-25 17:13:02 +08:00 · 1217 次点击
    这是一个创建于 2099 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我有一个资源管理类,叫 ResMgr,里面要管理很多不同类型的资源,ResA、ResB、ResC,这些资源都是从文件中初始化的,都继承类同一个基类 ResBase,每添加一个新的资源 ResX,我都要加同样的代码

    • 在 ResMgr 里面加一个私有的成员变量:
    private:
      ResX res_x_;
    
    • 在 ResMgr 里面加一个共有的访问函数:
    public:
      const ResX& res_x() const { return res_x_; }
    
    • 在 ResMgr 的初始化函数中,加一个 ResX 的初始化
    res_x_.init("path");//这个 path 对不同的资源来说是不一样的
    

    有没有什么方式一口气把这三件事一起做了啊,我现在已经有 30 多种资源了,感觉一样的代码写了无数遍……
    最好是能在 c++11 标准下解决,更高级的语法暂时不支持

    第 1 条附言  ·  2019-03-25 18:24:10 +08:00

    我描述的有问题……
    ResBase<ResType>就用的是模板,很早之前写的代码了,最近感觉不好用,一下没反应过来说错了
    ResX不是一个资源,也是一个资源管理类,都自己管理了一些属于他的资源,相当于我是在ResMgr里面又去管理了很多ResXMgr。
    每新增一类资源,我都需要在ResMgr里面添加一个新的ResXMgr类型的成员,然后从文件里面把他初始化好,再添加一个访问函数

    7 条回复    2019-03-25 18:24:45 +08:00
    karllynn
        1
    karllynn  
       2019-03-25 17:23:56 +08:00
    emmm 你可以写一个代码生成器…
    MrVito
        2
    MrVito  
    OP
       2019-03-25 17:43:33 +08:00
    @karllynn 不行……因为有一些资源的逻辑是不一样的,大部分的资源都只要提供一个访问函数就行了,有一些还需要提供一些和业务相关的查找方法。
    karllynn
        3
    karllynn  
       2019-03-25 17:48:34 +08:00
    那你把思路反过来,资源管理类这边写个注册函数,然后各种资源把自己注册到管理类
    v2byy
        4
    v2byy  
       2019-03-25 17:49:12 +08:00 via iPhone
    模版考虑一下?为什么非要放在一个管理类中?
    jxf2008
        5
    jxf2008  
       2019-03-25 17:57:17 +08:00
    不是很懂楼主的意思


    你的那些 ResA、ResB、ResC 能否放入 Map 中,如果可以,只要两个函数就可以解决了
    add("类名",ResX),
    get("类名")
    ResMgr 类李建立一个 Map 管理这些资源类,这些资源类也可以随时添加改删
    v2mm
        6
    v2mm  
       2019-03-25 17:59:26 +08:00
    这种一般考虑用模板
    MrVito
        7
    MrVito  
    OP
       2019-03-25 18:24:45 +08:00
    @karllynn @v2byy @jxf2008 @v2mm 更新了问题……很早之前的代码了,刚才去看源文件才意识到自己说错了,不好意思。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3286 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 00:48 · PVG 08:48 · LAX 16:48 · JFK 19:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.