【发布时间】:2018-04-16 08:20:50
【问题描述】:
我希望能够从字符串初始化一个类(我给出“MyClass”,它会创建一个对象 MyClass)。
我知道这样做是不可能的,所以我创建了一个类,它有一个映射,其中一个字符串作为键,一个指向函数(创建对象)的指针作为值。
动态创建对象对这个和我的地图来说不是问题。
template<typename T> JsonSerializable* createInstance() { return new T; }
我的问题是我想将类动态添加到我的地图中。那可能吗 ? 我该怎么办:
void MyFactory::addNewClass(std::string& name, class c)
{
map[name]=&createInstance<c>();
}
我可以将指针或其他东西传递给类本身(而不是对象)吗?并使用它来动态创建所有内容。
如果不可能,我将不得不对其进行硬编码。
【问题讨论】:
-
你可能想要
map[name]=&createInstance<c>;。你想把函数放在那里,而不是对象。我想。如果你显示map的类型会更清楚。 -
您可能对std::function感兴趣。
-
@nwp 我已经更正了,这是我过去的错误副本。我的问题不是调用构造函数,我的问题是将类作为类而不是对象传递。
-
你像
template <class T> void MyFactory::addNewClass(std::string& name){map[name]=&createInstance<T>;}一样传递它以像myFactory.addNewClass<Foo>("Foo");一样被调用。 -
@mco 在我看来每个
createInstance<c>都有JsonSerializable *(*)();类型。
标签: c++ types generic-programming