我目前正在构建一个事件管理器来处理各种回调。我想与其他SDL事件分开处理SDL键盘事件,同时保持我的类的界面一致。为此我要重载方法,但我不确定我是否创建了模糊代码。
我目前有两种方法:
unsigned set_callback(SDL_EventType event_type, const std::function<void(const SDL_Event&)>& callback_func);
unsigned set_callback(SDL_Keycode key, const std::function<void(const SDL_Event&)>& callback_func);
在文档中,SDL_EventType被列为具有基础type of Uint32。我找不到任何列出SDL_Keycode基础类型的文档。在源代码中它是typedef'd to Sint32,但是这种typedef似乎与枚举密钥代码的枚举无关。 SDL似乎依赖于编译器使Keycode枚举的基础类型成为一个有符号的int,因为它的一个值小于零(尽管我不知道哪个)。如果将来删除该负值,编译器可能会使底层类型成为unsigned int,从而使我的重载方法不明确。
那么,SDL库是否保证这两个枚举总是具有不同的底层类型?