SFML 2.1 C++文档-实际上是sf::Event的一个联合
SFML 2.1 C++ documentation - is sf::Event really a union?
在阅读SFML 2.1的文档时,我偶然发现了以下内容:
在处理事件之前,重要的是要了解sf::Event类型是什么,以及如何正确使用它。sf::Event是一个联合,这意味着一次只有一个成员有效(记住C++课程:联合的所有成员共享同一内存空间)。
然而,在检查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不能是并集,因为例如,sf::Event::EventType不与sf::Event的任何其他成员共享内存区域,这在定义中有明确定义。
我看到的唯一的并集声明如下,再次取自类定义:
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)
};
那么,我是遗漏了什么,还是只是文档中的一个真正错误?
它不是一个联合,并且由于枚举类型成员甚至不像类那样是一个联合
9.5.8
类联合类是一个联合或具有匿名联合的类作为直接成员。类X的并集有一组可变成员。
你可以自己检查一下:
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
}
示例
不管怎样,这个类的大部分由一个匿名联合组成,我相信文档希望简化这个假设,让读者更容易理解。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 运行同一解决方案的另一个项目的项目
- 挂起和取消挂起一个文件DLL
- 用C++中的一个变量定义一个常量
- 函数向量_指针有不同的原型,我可以构建一个吗
- 在c++中用vector填充一个简单的动态数组
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 预处理器:插入结构名称中的前一个行号
- 我在c++代码中生成了一个运行时#3异常
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 从链接列表c++中删除一个项目
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '