动态分配数据类型C ++

时间:2013-11-30 16:20:28

标签: c++ class types instantiation

有没有办法可以将数据类型写入字符串,然后从字符串中实例化类型。

我有一个地图编辑器,可以创建一个定义地图(例如:“aa”=沙砖,“ab”=草地砖)但是如果不是有一个重要的开关声明,我会很方便访问瓷砖的定义(即:我传入“aa”并接收砂砖),然后直接实例化砂砖。这是一些伪代码,以防我太模糊了。

而不是:

(以下伪代码片段假设所有切片都继承自某种类型的tile类,该类具有接受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);

感谢阅读!

1 个答案:

答案 0 :(得分:3)

你可以简单地从tile类型字符串到一个带有x和y参数的函数的映射,并返回一个指向公共tile基类的指针...

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);