【发布时间】:2016-05-19 15:55:54
【问题描述】:
我想要做什么:我从 XML 文件加载数据(这很好)。 XML 告诉程序创建类实例(来自特定的不同类,如Car 或Plane),然后这些实例将存在于程序中。这些类实例对象是总体Object 基类的子类。
XML文件以数字的形式存储了需要创建什么类型的对象,程序会根据这个数字确定创建哪个类的对象。
我可以使用switch 语句并枚举所有类型的对象,但是当添加大量对象实例时,这对性能的影响非常大。因此,我想要一个从 char[2] 到所需类的映射。 (注意:对于类类型本身,而不是类的实例。)
例如,如果 XML 属性为 'type=0x01',则将生成来自类 Car 的对象,而如果是 'type=0x02',则将生成 Plane 对象。 (两者都是Object)
这样,我想使用一个常量映射来完成这项工作。我想写类似的东西
map<char[2],class> ObjectsList = {
{0x01,Car},
{0x02,Plane}
//etc, etc.
}
...
// while loading data from xml file on which objects need to get created,
// an object-tag gives data from 'type' attribute, and the program stores
// it in 'char[2] type';
char[2] type = getattributestufffromxml("type");
ObjectsList[type] newObject = memoryallocator.allocate(sizeof(ObjectsList[type]);
newObject.Init(); //inherited function from Object
这样做的想法是创建一种更快的方法,而不是坚持使用 switch 语句,这在创建数百个对象时很糟糕。
我需要做什么才能从上面得到有效的 C++?我不知道如何在地图中存储类类型。 (我收到编译器错误,例如“参数 2/4 无效”)
【问题讨论】:
-
有人知道我该如何解决这个问题吗?它有什么问题?
-
为了清楚起见,我添加了一些额外的解释。问题是;我想将类类型作为参考存储在地图中,因此很容易引用。
-
你是故意slicing your objects在那张地图上吗?
-
@Generaal 看起来更像是我使用
std::map<uint8_t,Vehicle*>的案例。 -
@WhozCraig:不,这不是我的意图。
标签: c++ xml dictionary