c++;如何将字符串(类名)转换为类型
C++; How to turn a string (name of class) into a type?
函数应该接受类名并返回该类型的对象。如何在c++中做到这一点?
这叫做反射,不是c++语言的一部分。可以使用通常称为工厂模式的东西来实现。它的工作方式是,对于您希望能够创建的每种类型,您可以在可以创建该类型对象的函数和它的名称之间创建映射。
这个映射可以是像std::map
这样简单的东西,其中键是类的名称,值是一个函数指针,指向返回类的新实例的函数。
根据您的问题的确切需求,您可能会询问反射(在最一般的情况下),该反射不受语言的本机支持,但您可能会找到一些库,或工厂模式的一种形式,其中您创建一个接收一组参数并返回适当类型的对象的函数。第二种情况是一个更有限的场景,其中类型必须相关,并且您必须实现工厂…
所以问题是,你能扩展你的特殊需求吗?您将不得不依赖于在您的对象上引入反射的框架,例如Qt元对象系统,或者您自己编写。
然而,这不是真正的反射,只能在您的手动帮助下工作,或者以需要调用工具的形式,或者以您必须将可实例化的类注册到框架的形式。
相关文章:
- 有没有一种方法可以在编译时获得作用域类名
- 错误:需要类名(链表c++)
- C++20 概念:如何在"requires"子句中引用类名?
- '{'标记之前的预期类名,然后在预声明时无效使用不完整的类型'class class_name'
- 如何在友元函数中使用静态成员而不添加前缀 [类名]::
- 发生注入类名时会发生什么情况?(C++)
- C++包括类名间距和类实例化
- C++ 类名函数()
- 限定的依赖名称查找,其中包含基类的注入类名
- 我可以通过将类强制转换为 char* 来序列化类吗?
- 当初始值设定项是基类名时'initializer does not name a non-static data member or base class'错误
- C++:错误:"{"标记之前的预期类名
- C++,使用类名调用函数
- 无法<string>从"常量字符 []"转换为<类名>
- 无法从 void* 类型转换(类名::)() 以键入 void*(*)(void*)
- C++错误:"没有从 [类名] 到"void *"的合适转换函数"
- 如何转换为变量类名
- C++错误:无法将参数 1 从 'int' 转换为 'const [类名]
- c++;如何将字符串(类名)转换为类型
- 无法在pthread中从类型void*(类名)(void*)转换为类型void* (*)(void*)