C++类指针调用构造函数
C++ call constructor from class pointer?
我希望能够从字符串初始化一个类(我给"MyClass",它会创建一个对象MyClass)。
我知道这是不可能的,所以我创建了一个类,该类有一个映射,其中字符串作为键,指向函数(创建对象)的指针作为值。
动态创建对象不是这个和我的地图的问题。
template<typename T> JsonSerializable* createInstance() { return new T; }
我的问题是我想将类动态添加到我的地图中。这可能吗?我该怎么做 :
void MyFactory::addNewClass(std::string& name, class c)
{
map[name]=&createInstance<c>();
}
我可以将指针或其他东西传递给类本身(而不是对象)吗?并用它来动态创建一切。
如果不可能,我将不得不对其进行硬编码。
好的。因此,如果您使用的是 C++11,那么 lambda 可以帮助获得您正在寻找的通用行为。
首先,我们需要一个SuperBase
,所有的类都应该像这样派生出来。
class SuperBase {};
class A : public SuperBase {};
class B: public SuperBase {};
然后创建一个将std::string
作为键,std::function
作为值的映射。
map<string,std::function<SuperBase*()>> myMap;
函数返回类型SuperBase
,addNewClass
函数可以定义为
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();
}
请记住,您需要virtual
SuperBase
函数才能具有多态行为,然后一切都应该正常工作
希望对你有帮助
相关文章:
- 获取从C++中同一类中的构造函数调用的方法返回的值
- 从具有按值捕获的 lambda 移动构造 std::函数时,移动构造函数调用两次
- 确保所有构造函数调用相同的函数 c++ 设计模式
- 减少复制构造函数调用
- 使用回调函数从构造函数调用虚拟/派生方法的替代方法?
- 在 Google 测试中,我可以从构造函数调用 GetParam() 吗?
- C++ - 从另一个类构造函数调用类构造函数
- 在C++中初始化带有和不使用构造函数调用的对象有什么区别
- 是否可以从移动构造函数调用默认构造函数?
- 在模板生成器模式中分解重复的构造函数调用
- std::atexit 从全局对象的构造函数调用时的排序
- 对构造函数调用的约束
- 编译器错过了无效的构造函数调用,并调用不存在的(或私有的)默认构造函数
- 用构造函数调用填充向量
- 创建指针时是否没有构造函数调用
- 使用 emplace_back 避免移动构造函数调用的最佳方法?
- C++ 抽象类构造函数调用
- 为什么函数参数将带有参数的构造函数调用
- 为什么比“构造函数”调用更多的“解构器”调用
- 将对象传递给函数并不是导致构造函数调用