c++ - 动态分配数据类型 C++

标签 c++ class types instantiation

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

我有一个 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/

相关文章:

c++ - 在特定的 Unicode 路径中创建文件

ios - 是否可以使用变量动态更改代码中类的名称?

c - 混合 typedef 和定义来强制数据类型大小

c++ - 返回一个 char 数组而不是 const char *

c++ - OpenCV 错误信息(匹配模板)

c# - 从方法设置只读属性

php - PHP 构造函数的用途

python - 为什么 Python 中的 float 对象没有分母属性,而 int 有?

java - 如何从包含多种数据类型的文本文件中进行输入

Android C++ 而不是 C