gpt4 book ai didi

c++ - SFML 2.1 C++ 文档 - sf::Event 真的是一个 union 吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:52:28 27 4
gpt4 key购买 nike

在阅读 SFML 2.1 的文档时,我偶然发现了这个:

Before dealing with events, it is important to understand what the sf::Event type is, and how to correctly use it. sf::Event is a union, which means that only one of its member is valid at a time (remember your C++ lesson: all the members of a union share the same memory space).

然而,在检查 sf::Event 的声明后,我发现了这个:

    class Event
{
public :

////////////////////////////////////////////////////////////
/// \brief Size events parameters (Resized)
///
////////////////////////////////////////////////////////////
struct SizeEvent
{
unsigned int width; ///< New width, in pixels
unsigned int height; ///< New height, in pixels
};
.....
EventType type; ///< Type of the event
....

sf::Event 不能是 union 体,因为例如 sf::Event::EventType 不与 sf::Event 的任何其他成员共享内存区域,正如定义中明确定义的那样。

我看到的唯一 union 声明如下,再次取自类定义:

union
{
SizeEvent size; ///< Size event parameters (Event::Resized)
KeyEvent key; ///< Key event parameters (Event::KeyPressed, Event::KeyReleased)
TextEvent text; ///< Text event parameters (Event::TextEntered)
MouseMoveEvent mouseMove; ///< Mouse move event parameters (Event::MouseMoved)
MouseButtonEvent mouseButton; ///< Mouse button event parameters (Event::MouseButtonPressed, Event::MouseButtonReleased)
MouseWheelEvent mouseWheel; ///< Mouse wheel event parameters (Event::MouseWheelMoved)
JoystickMoveEvent joystickMove; ///< Joystick move event parameters (Event::JoystickMoved)
JoystickButtonEvent joystickButton; ///< Joystick button event parameters (Event::JoystickButtonPressed, Event::JoystickButtonReleased)
JoystickConnectEvent joystickConnect; ///< Joystick (dis)connect event parameters (Event::JoystickConnected, Event::JoystickDisconnected)
};

那么我是不是遗漏了什么,或者这只是文档中的真正错误?

最佳答案

它不是 union ,并且由于枚举类型成员甚至不是类 union 类

9.5.8

A union-like class is a union or a class that has an anonymous union as a direct member. A union-like class X has a set of variant members.

你可以自己检查一下:

class IsUnion {
public:

struct struct1 {
float tt;
};

struct struct2 {
float tt;
};

enum EventType { no, yes };

EventType type;

union
{
struct1 obj;
struct2 obj2;
};

};

int main() {

cout << is_union<IsUnion>::value; // 0
}

Example

无论如何,该类的大部分由匿名 union 组成,我相信文档希望简化这一假设并使读者易于理解。

关于c++ - SFML 2.1 C++ 文档 - sf::Event 真的是一个 union 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26063812/

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