打印

对象创建问题

[复制链接]
790|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xsgy123|  楼主 | 2013-12-30 21:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
假设有模块一得到一个类型的ID(int类型)
另模块二中有ID和这个ID对应的类,
现在需要解决的是:模块一调用模板二的接口函数(传递ID)直接得到对应的类对象,哪位大侠能给个好的实现方案?

我目前能想到的是在模块二中创建个映射表,这样是不是土?另外如果是个map的话,如何动态创建对应的类对象?如:
myMap[1] = "Class1";
myMap[2] = "Class2";

createObject(int id)
{
   这里如何写呢?
    ....
}

可能通过模板来实现解决这个问题吗?听说可以通过STL 里模板中关于Trait的实现来解决这个问题,没弄过这块,谁能帮助一下,或提供思路?

相关帖子

沙发
无冕之王| | 2013-12-30 21:29 | 只看该作者
写个基类,定义成员unsigned int ID.

base* createObj(int id)
{
    switch(id)
    case x:
        // todo:
        break;
    case y:
        // todo:
        break;
    case z:
        // todo:
        break;
    default:
        // todo:
}

todo 就new你的对象,并返回

使用特权

评论回复
板凳
yybj| | 2013-12-30 21:40 | 只看该作者
模块一直接构造模块二的对象不可以么?

使用特权

评论回复
地板
秋天落叶| | 2013-12-30 21:51 | 只看该作者
为每个类定义工厂, 然后搞一个工厂map就OK了。以下是伪代码:

class iobject; //接口类型

static map<int, factory>& get_factories() {
  static map<int, factory> factories;
  return factories;
}

void reg_factory(int id, factory f) {
  get_factories().add(id, f);
}

iobject* create_object(int id) {
   return get_factories().get(id)();
}

template<typename T>
class factory_register {
public:
    factory_register(int id) {
        reg_factory(id, create_object);
    }
private:
    static iobject* create_object() {
        return new T();
    }
}

// foo_object.hpp
class foo_object : public virtual iobject { // 如果不喜欢virtual也可不用
/* 成员声明 */
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

229

主题

2603

帖子

1

粉丝