gpt4 book ai didi

c++ - 将 union 枚举传递给 C++ 中的函数

转载 作者:行者123 更新时间:2023-12-04 07:38:30 24 4
gpt4 key购买 nike

我正在帮助一个反编译视频游戏的项目。
游戏有设置事件相机的功能:

SetActiveCam(LevelIds level, int16_t cam)
“LevelIds”只是一个带有 int16_t 值的枚举类(从 0 到 15 的完整集合)。
我想对凸轮 ID 做类似的事情:
SetActiveCam(LevelIds level, CameraIds cam)
但是,凸轮 ID 值是上下文敏感的,具体取决于级别。
例如,CamID #2 可能是“菜单”级别中的 OptionsMenu,但完全属于“森林”级别的其他内容。
下面我创建了一个 CameraIds union ,其中包含在枚举中命名的所有“菜单”凸轮:
union CameraIds
{
enum class Menu : int16_t
{
eMainMenu_1 = 1,
eOptions_2 = 2,
eGamespeakGamepad_3 = 3,
eMotions_4 = 4,
eSound_5 = 5,
eLoad_6 = 6,
eMotionsGamespeakGamepad_7 = 7,
eCopyright_10 = 10,
eLoading_21 = 21,
eFmvSelect_30 = 30,
eLvlSelect_31 = 31,
eGamespeakKeyboard_33 = 33,
eMotionsGamespeakKeyboard_37 = 37,
eController_40 = 40,
eControllerConfig_41 = 41
} menu;

enum class Forest : int16_t
{
eForestStart_1 = 1,
eForestSecretScreen_23 = 23
} forest;

int16_t raw;
};
但是,下面的函数调用...
SetActiveCam(LevelIds::eMenu_0, CameraIds::Menu::eOptions_2);
导致以下错误消息:

No suitable constructor exists to convert from "CameraIds::Menu" to "CameraIds"


有什么想法吗?
这个想法是通过为这些相机 ID 中的一些赋予适当的名称来减少魔数(Magic Number)。
“CameraIds::LEVEL::SCREEN”格式是我非常喜欢的格式——但我无法让它工作......
有什么明显的我遗漏了吗?类型转换可能是这样......但这是一个好习惯吗?
编辑:添加了另一个枚举以减轻一些困惑。

最佳答案

您只想传递枚举,但您的参数类型是整个 union 。您需要将第二个参数类型从 CameraIDs 更改为 CameraIDs::Menu。

关于c++ - 将 union 枚举传递给 C++ 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67616251/

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