正在为数组中的元素生成 'readable' 唯一标识符?
Generating 'readable' unique identifier to element in array?
我正在尝试制作一个 OpenGL 游戏引擎,并像这样初始化场景:(简化)
逐行读取 scene.txt 文件:
第一部分:Shaders 的名称。我加载它们
第二部分:需要创建的材料的名称。
- 以及将附加到 material 的 着色器 的名称。
因此,正如您目前所见,我通过字符串 识别'elements'(如着色器和materials),这不是那么有效。 (不过我觉得在初始化的时候是可以接受的)
问题是,如果我想在运行时更改对象的 material 或 material 的着色器,我必须通过相应的数组并 compare 它的元素名称 (string) 直到我找到对应的。
我觉得这有点慢,所以我想知道,如何在运行时创建一个唯一的、易于比较的标识符?
有没有办法"dynamic enum handling"之类的?
换句话说:我如何识别我不知道编译时间的东西?
(使用 int 作为标识符并不是真正的 "talking" 名称)
我想到了这个:
- 为所有可能的 着色器创建一个枚举。
- 我创建了一个 布尔数组 ,其中包含每个可能的着色器的 1 个元素。
- 在初始化时,如果已加载,我将此数组中着色器的布尔值设置为 true。
这可能是一个非常糟糕的主意,所以请随意发表评论:)
最后我选择了 std::unordered_map
和 std::string
个键值。
我正在尝试制作一个 OpenGL 游戏引擎,并像这样初始化场景:(简化)
逐行读取 scene.txt 文件:
第一部分:Shaders 的名称。我加载它们
第二部分:需要创建的材料的名称。
- 以及将附加到 material 的 着色器 的名称。
因此,正如您目前所见,我通过字符串 识别'elements'(如着色器和materials),这不是那么有效。 (不过我觉得在初始化的时候是可以接受的)
问题是,如果我想在运行时更改对象的 material 或 material 的着色器,我必须通过相应的数组并 compare 它的元素名称 (string) 直到我找到对应的。
我觉得这有点慢,所以我想知道,如何在运行时创建一个唯一的、易于比较的标识符?
有没有办法"dynamic enum handling"之类的?
换句话说:我如何识别我不知道编译时间的东西?
(使用 int 作为标识符并不是真正的 "talking" 名称)
我想到了这个:
- 为所有可能的 着色器创建一个枚举。
- 我创建了一个 布尔数组 ,其中包含每个可能的着色器的 1 个元素。
- 在初始化时,如果已加载,我将此数组中着色器的布尔值设置为 true。
这可能是一个非常糟糕的主意,所以请随意发表评论:)
最后我选择了 std::unordered_map
和 std::string
个键值。