【问题标题】:Dynamically Assigning a Data type C++动态分配数据类型 C++
【发布时间】:2013-11-30 16:20:27
【问题描述】:

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

我有一个地图编辑器,它可以创建一个定义地图(即:“aa”= 沙瓦,“ab”= 草瓦),但是如果不是使用大量的 switch 语句,我可以很方便访问瓦片的定义(即:我传入“aa”并接收沙瓦),然后直接实例化沙瓦。这是一些伪代码,以防我太含糊。

代替:

(下面的伪代码 sn-ps 假设所有瓦片都继承自某种瓦片类,该瓦片类具有接受 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);

感谢阅读!

【问题讨论】:

  • 在 C++ 中没有反射,抱歉。

标签: c++ class types instantiation


【解决方案1】:

您可以简单地将瓦片类型字符串映射到接受 x 和 y 参数并返回指向公共瓦片基类的指针的函数...

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

【讨论】:

  • 很抱歉,看在我的份上,你能不能把这话小点儿……?你的意思是像,定义一个键是字符串,但元素是数据类型的映射?
  • 元素是指向特定于键标识的派生类型的函数的指针,并且该函数返回指向该派生类的新分配/构造的实例的指针。
  • 如何将指针存储在预制文件中?就目前而言,该文件几乎会在标题中读取类似这样的内容:“aa”=(grassTile,goblinEnemy)编辑:对不起,直到我发表评论后我才看到您的编辑
  • 不用担心 - 添加示例,因为它听起来像是您想要的 ;-)。顺便说一句 - 这种东西被称为工厂模式......如果你用谷歌搜索你会发现大量的例子和解释。
猜你喜欢
  • 2021-12-03
  • 2022-11-27
  • 1970-01-01
  • 2021-07-13
  • 2021-11-24
  • 1970-01-01
  • 2017-02-07
  • 1970-01-01
  • 2021-12-10
相关资源
最近更新 更多