首页 > 解决方案 > 是否可以在 C++ 中创建可以表示多个结构的数据类型?

问题描述

本质上,我正在为 SDL 创建一个包装器,它是 C++ 的媒体层库。我希望我的应用程序能够创建事件观察器(如 javascript's addEventListener())。对于不同类型的事件,我有几个不同的事件结构,如下所示。是否可以创建一个名为 Event 的数据类型,该数据类型可以传递给具有适当结构数据的用户定义处理函数。

struct MouseEvent {
    EventType type;
    int x;
    int y;
    uint8_t which;
    bool down;
};
struct KeyboardEvent {
    EventType type;
    int keyCode;
    const char* key;
    bool lshift;
    bool rshift;
    bool lctrl;
    bool rctrl;
    bool lalt;
    bool ralt;
    bool lmeta;
    bool rmeta;
    bool numlock;
    bool capslock;
    bool ctrl;
    bool shift;
    bool alt;
    bool meta;
};
struct WindowEvent {
    EventType type;
};
struct WheelEvent {
    EventType type;
    int x;
    int y;
    bool dir;
};

因此,为了进一步解释,这里有一个示例:使用单击,以便创建一个 MouseEvent 并将该 MouseEvent 作为 Event 类型传递给一个检查 mousedown 侦听器的函数。这是这样做的好方法还是我只是愚蠢。

我已经研究过联合但是当你使用联合时,如果用户想在事件中访问数据,他们将不得不做一些事情,比如event.mouse.x当我更喜欢它被访问时,event.x也许我太挑剔了

标签: c++c++11struct

解决方案


推荐阅读