Sqe*_*aky 2 c++ sdl variable-assignment deque unions
我正在与一个图书馆合作,我必须与工会合作.具体来说,我正在使用SDL和SDL_Event联合.我需要复制SDL_Events,我找不到关于使用联合重载赋值运算符的好信息.
如果我可以重载赋值运算符,我应该手动筛选联合成员并复制相关成员,或者我可以简单地来一些成员(这对我来说似乎很危险),或者只是使用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
}
Run Code Online (Sandbox Code Playgroud)
所以,如果没有别的,我将学习更仔细地看看我最近没有用过的容器的成员函数.感谢您解释默认情况下的分配工作,否则需要更长的时间才能找到它.
在联合中,元素都占据相同的记忆,就像它们彼此叠加一样.如果你写入联盟的另一个元素,它会覆盖其他元素.
因此,逐个元素复制是浪费时间.你可以只复制最大的元素,但是你必须知道它是哪一个(不是每个元素的元素都必须是相同的大小)最好的办法就是memcpy union.
但它比这更简单,你应该能够做一个赋值,并且编译器,意识到你正在复制一个结构或联合,将隐式地为你做"memcpy".
| 归档时间: |
|
| 查看次数: |
8135 次 |
| 最近记录: |