我有一種可以註冊對象的對象註冊表。這應該在初始化階段完成。例如。修改基於對象的對象,但返回指向派生類的指針
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