gpt4 book ai didi

C++ 根据 ID 识别类

转载 作者:行者123 更新时间:2023-11-30 00:58:01 25 4
gpt4 key购买 nike

好的,我正在制作一个基于图 block 的游戏,并且我正在从一个文件中加载一个世界。所以我得到了一个大约 100 x 15 个字符的数组,每个字符代表一个图 block 的 ID。假设我有 32 种类型的瓷砖,每种都有特殊的属性。它们都继承自 Tile 类,并且每个都有一个 ID 0-31。我想创建一个 100 x 15 瓷砖的瓷砖阵列,另一个带有字符的阵列会告诉我将哪些瓷砖放在哪里。但基本上,我怎样才能最有效地找出 ID 属于哪个图 block ?

比如说,我刚刚读取了一个字符,它是 3,它与某个磁贴“D”相关。那么,我应该做这种事情吗:

switch(idFromChar)
case 0: tile A
case 1: tile B
case 2: tile C
case 3: tile D

虽然这对我来说似乎很慢,但可能不得不经常这样做。就像我在一个关卡中有 1000 个图 block 和 255 种类型的图 block 一样,加载关卡需要 255000 次检查。我希望有某种类似于 Tile 类数组的东西。如:

tileClassArray[0] = A
tileClassArray[1] = B

等等……

这样,我就可以调用:

(tileClassArray[IDFromChar])(parameters)

作为构造函数,无需遍历每个 Tile 类。但是我不知道如何制作类数组,或者是否可能。

你明白我想说的吗?任何帮助都会很好。

最佳答案

遗憾的是,您不能存储构造函数。您必须制作一个模板函数来创建一个对象,然后存储指向该对象的指针,然后您可以通过索引调用该函数。

class Tile { ... }; // base class
class TileA : public Tile { ... };
class TileB : public Tile { ... };
class TileC : public Tile { ... };
...

template<typename T>
Tile* createTile() {
return new T;
};

typedef Tile*(*TileCreator)();

TileCreator creationFuncs[] = {
&createTile<TileA>,
&createTile<TileB>,
&createTile<TileC>,
....
};

Tile* newTile = (creationFuncs[type])();

但是,我想不出一种在输入方面不会O(n) 效率的方法:)

关于C++ 根据 ID 识别类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7016123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com