私は図書館のプロジェクトに取り組んでおり、労働組合と協力しなければなりません。具体的には、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&)
EDIT2:これはとてもばかげていました... Dequeues pop() メンバーが削除されたアイテムを返したと思いました。コードが単純すぎて直接自分のコードにできないと思っていたのですが、それは間違っていることがわかりました。
私のコードは次のようになりました:
for(SDL_Event CurrentEvent; !DequeueOfSDLEvents.empty(); CurrentEvent = DequeueOfSDLEvents.pop() )
{
//Do stuff
}
したがって、最近使用していないコンテナーのメンバー関数を詳しく調べることを学べます。割り当てがデフォルトで機能することを説明してくれてありがとう。そうでなければ、これを見つけるのに時間がかかったでしょう。