1
我有一個工廠類註冊類型如何正確註冊?
class Factory
{
public:
template<class T>
static void regist()
{
mMap[T::type()] = [](){return new T();};
}
static Base* create(string type)
{
... // use map to find the function to create a new object
}
private:
static map<string, function<Base*()>> mMap;
};
map<string, function<Base*()>> Factory::mMap;
和基地
class A : public Base
{
public:
static string type() { return "A"; }
static bool sRegist;
A() {}
};
bool A::sRegist = []() -> bool {
Factory::regist<A>();
return true;
}();
的具體T類然而,當運行該代碼崩潰。我認爲這是由於靜態成員的無限初始化順序。如何使它工作?謝謝。
'bool A :: sRegist = Factory :: regist ();'應該工作嗎? (對不起,最初沒有得到代碼在做什麼) – Ashalynd