C++ union 赋值,有什么好办法吗?

标签 c++ sdl variable-assignment unions deque

我正在从事与图书馆有关的项目,我必须与 union 合作。具体来说,我正在使用 SDL 和 SDL_Event union .我需要制作 SDL_Events 的拷贝,但找不到有关使用 union 重载赋值运算符的有用信息。

假设我可以重载赋值运算符,我应该手动筛选 union 成员并复制相关成员,还是我可以简单地加入一些成员(这对我来说似乎很危险),或者可能只是使用 memcpy()(这似乎简单快速,但有点危险)?

如果我不能重载运算符,我最好的选择是什么?我想我可以制作新拷贝并传递一堆指针,但在这种情况下我宁愿不这样做。

欢迎任何想法!

编辑: 根据要求错误消息,顺便说一句,我想我学到了一些东西......

physworld.cpp:325: error: no match for ‘operator=’ in ‘CurrentEvent = ((physworld*)this)->physworld::SDL_UserInputEvents.std::queue<_Tp, _Sequence>::pop [with _Tp = SDL_Event, _Sequence = std::deque<SDL_Event, std::allocator<SDL_Event> >]()’ /usr/include/SDL/SDL_events.h:220: note: candidates are: SDL_Event& SDL_Event::operator=(const SDL_Event&)

编辑2: 这太愚蠢了……我以为 Deqeues pop() 成员返回了删除的项目。我以为代码太简单了,不能直接是我的代码,但事实证明那是错误的。

我的代码看起来像:

 for(SDL_Event CurrentEvent; !DequeueOfSDLEvents.empty(); CurrentEvent = DequeueOfSDLEvents.pop() )
 {
   //Do stuff
 }

因此,如果不出意外,我将学习更仔细地研究我最近未使用过的容器的成员函数。感谢您解释默认情况下分配有效,否则要花更长的时间才能找到它。

最佳答案

在 union 中,所有元素都占用相同的内存,就像它们坐在彼此之上一样。如果您写入 union 的另一个元素,它会覆盖其他元素。

因此,逐个元素复制是浪费时间。您只能复制最大的元素,但是您必须知道它是哪一个(并非 union 的每个元素都必须具有相同的大小)最好的办法就是 memcpy union 。

但它比这更简单,你应该能够只做一个赋值,编译器意识到你正在复制一个结构或 union ,会隐式地为你做“memcpy”。

关于C++ union 赋值,有什么好办法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2466486/

相关文章:

c++ - 调试串行轮询的方法

c++ - 我怎样才能有效地洗牌?

c++ - SDL 不渲染(Linux、i3wm)

audio - 音频卷积输出比输入长,当将数据反馈到固定长度的流时,如何解决此问题?

java - Java中有 "this"的名称吗?

bash - 你能在 bash 中的变量赋值中进行比较吗?

c++ - 访问父类(super class)类型成员对象的 protected 成员——一个优雅的解决方案

c++ - 扩展命令行太长

multithreading - OpenGL 和线程

Java:使用 try block 中的变量