我有一个工厂类来注册一个类型
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;
和 Base 的具体类 T
class A : public Base
{
public:
static string type() { return "A"; }
static bool sRegist;
A() {}
};
bool A::sRegist = []() -> bool {
Factory::regist<A>();
return true;
}();
但是,代码在运行时会崩溃。我认为这是由于静态成员的不确定初始化顺序。如何使它起作用?谢谢。