我有一种可以注册对象的对象注册表。这应该在初始化阶段完成。例如。修改基于对象的对象,但返回指向派生类的指针
class ObjectBase {
protected:
bool active;
public:
void activate() { active = true; }
};
template<typename T>
class Object : public ObjectBase {
T value;
};
class Registry {
public:
template<typename T>
static std::shared_ptr<Object<T>> registerObject() {
return std::make_shared<Object<T>>();
}
namespace {
std::shared_ptr< Object<int> > myObject = Registry::registerObject<int>();
}
现在我想active
值设置在初始化(和构造函数的参数是不是一种选择,因为这只是众多一个)。什么是整齐的是,如果我能做到以下几点:
namespace {
std::shared_ptr< Object<int> > myObject = Registry::registerObject<int>()->activate();
}
但是我没有看到激活方式()返回Object类型的指针(除非我使它成为一个模板,以及和做一个动态的演员,但这看起来很丑陋),以免共享指针。或者有什么方法?或者,你们有没有建议如何处理这个任务(即注册一些东西并设置一些属性)?
编辑:
定名我Object
类可能是不幸的。作为一个实际的例子,将Object看作一个属性(保存一个整数)。显然可能有多个整数属性。和想象“活动”作为一个类似于“应该备份” /“应该用远程进程同步”/...
是不是有一个原因,你不能在ObjectBase的构造函数中调用'activate()'? – 2014-11-20 20:03:22
因为我目前有4个这样的布尔值更可能来。 – BillP 2014-11-20 20:07:41
如果是这种情况,那么需要更多信息才能正确回答问题。例如,有没有一种情况是你不想在构建对象时激活一个对象? – 2014-11-20 20:11:23