有没有一种方法可以将数据类型写入字符串,然后从字符串中实例化该类型。
我有一个 map 编辑器,可以创建一个定义 map (即:“aa”= 沙地 block ,“ab”= 草地 block ),但如果不用繁琐的 switch 语句,我就可以很方便访问瓷砖的定义(即:我传入“aa”并接收沙子瓷砖),然后直接实例化沙子瓷砖。这里有一些伪代码,以防我说得太含糊。
代替:
(以下伪代码片段假设所有图 block 都继承自某种图 block 类,该类具有接受 x 和 y 值的构造函数。)
switch definitions[tileType]{
case "sandTile":
sandTile tile(x,y);
break;
case "grassTile":
grassTile tile(x,y);
break;
case "waterTile":
waterTile tile(x,y);
break;
有点像
string type = declarations[tileType];
magicalDataTypeCaster<type> tile(x,y);
感谢阅读!
最佳答案
您可以简单地将图 block 类型字符串映射到接受 x 和 y 参数并返回指向公共(public)图 block 基类的指针的函数...
typedef Tile* (*Creator)(X x, Y y);
std::map<std::string, Creator> creators;
creators["sandTile"] = &SandTile::create; // static Creator
....
Tile* a_tile = creators[type](x, y);
关于c++ - 动态分配数据类型 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20302551/