C++ 从 class 指针调用构造函数?

C++ call constructor from class pointer?

我希望能够从字符串初始化 class(我给 "MyClass",它会创建一个对象 MyClass)。

我知道这是不可能的,所以我创建了一个 class,它有一个映射,其中一个字符串作为键,一个指向函数(创建对象)的指针作为值。

动态创建对象不是这个和我的地图的问题。

template<typename T> JsonSerializable* createInstance() { return new T; }

我的问题是我想动态添加 classes 到我的地图。那可能吗 ? 我该怎么做:

void MyFactory::addNewClass(std::string& name, class c)
{
    map[name]=&createInstance<c>();
}

我可以将指针或其他东西传递给 class 本身(不是对象)吗?并使用它来动态创建一切。

如果不可能,我将不得不对其进行硬编码。

好的.. 因此,如果您使用的是 C++11,那么 lambda 可以帮助您获得您正在寻找的通用行为。

首先,我们需要一个 SuperBase,所有的 类 都应该像这样导出

class SuperBase {};
class A : public SuperBase {};

class B: public SuperBase {};

然后创建一个以std::string为键,std::function为值的映射。

map<string,std::function<SuperBase*()>> myMap;

函数return类型为SuperBaseaddNewClass函数可定义为

template <typename type>
void addNewClass(std::string name) {
    myMap[name] = []() { return new type();};
  }

所以从 main 函数你可以调用这个函数

addNewClass<A>("A");
addNewClass<B>("B");

然后在迭代时你可以调用函数来获得你想要的指针

 for( auto mapPair : myMap) {
        cout<<mapPair.first<<endl;
        SuperBase * sBase = mapPair.second();
    }

请记住,您需要 SuperBase 中的 virtual 个函数才能具有多态行为,然后一切正常

希望对你有帮助