在c++中如何将字符串转换为类对象
objective c - In C++ how to convert a string to class object?
例如,我有一个名为"WaterScene"的类,在。xml中,我保存为字符串"WaterScene",当我读取。xml时,我必须将该字符串转换为类。一种方法是字符串比较
if( string == "WaterScene")
return new WaterScene;
是否有通用的方法来避免字符串比较?就像在objective C(动态语言)中一样,我们可以使用string…
来获取类。Class classObject =[[NSBundle mainBundle] classNamed:string];
如果您要返回的所有对象都是从一个公共基类派生的,那么您可以使用std::map<std::string,BaseClass *>
。比较最终在某个地方,但它使事情更有条理。
不,你不能用标准的c++做到这一点。c++没有反射的概念。对不起:)
我认为您可能会使用利用抽象工厂模式的实现。这是一篇关于以Boost为中心的实现的非常好的文章。
No。在某种程度上,必须在代码中进行字符串比较。c++没有这种动态编程机制
No。但是为了优雅地绕过这个限制,我将枚举所有可能的类,并创建一个对应类名的数组:
enum ECLASSTYPE
{
CT_WATER_SCENE,
CT_SOME_OTHER,
CT__MAX,
};
static const string g_classNames[CT__MAX] =
{
"WaterScene", // CT_WATER_SCENE
"SomeOther", // CT_SOME_OTHER
};
解析xml时,将字符串名称解码为enum并传递给工厂方法:
switch (classType)
{
case CT_WATER_SCENE:
{
result = new WaterScene();
break;
}
...
}
我已经使用泛型类工厂来解决这个问题…首先,我注册类并将其存储在main()之前的映射中。
相关文章:
- 在nlohmann json中,如何将嵌套对象的数组转换为嵌套结构的向量
- 将父类对象强制转换为子类的问题
- 将方法转换为调用该方法的成员函子对象会导致崩溃
- 已转换对象的地址
- 如何在OpenGL中使用关键事件来转换对象
- 使用父类实例化的向下转换对象
- 静态强制转换允许转换对象指针,但不允许转换整数
- 为什么类型转换对象不会更改其地址?有关对象类型的信息存储在哪里?
- 找到对象类型后,是否可以使用 static_cast 强制转换对象
- 旨在复制/转换对象的功能系列的模板
- luabind 如何隐式强制转换对象
- 转换对象
- 使用隐式可转换对象调用move重载函数时的编译错误
- 关于在 cpp 中转换对象的两个问题
- 在运行时根据实例变量强制转换对象(c++)
- 使用用户定义的类型强制转换对象
- 在c++中转换对象
- 从"int"到非标量类型赋值运算符的转换 - 对象到 int
- 在屏幕上转换对象可编程管道
- 在 C 样式类型转换期间,关于强制转换对象的地址空间的实际情况