-1

変更しようとしている古い C ライブラリがあります。次のような行があります。

memcpy(&m_agents[idx].params, params, sizeof(dtCrowdAgentParams));

そしてもちろん、値や構造体のような C stule pod はコピーされます。しかし、追加しようとしましparams.some_struct.some_inner_map_field std::mapたが、memcpyで初期化されません。

それで、マップを生きたままコピーする方法を知りたいですか?(可能であれば と のメソッドを拡張しparamsないparams.some_struct)

4

2 に答える 2

1

構造体の完全な定義を確認する必要がありますが、これは機能するはずです。

m_agents[idx].params = *params;

POD タイプの場合、memcpy と同じことを行います。非 POD タイプの場合、代入演算子が呼び出されます。

于 2013-03-25T13:35:36.857 に答える
1

それを置き換える

m_agents[idx].params = *params;

そのインスタンスを修正します。ただし、使用している C ライブラリは全体的に POD を前提としていると想定するのが合理的であるため、コードベース全体をチェックして、他の場所で問題が発生するようなことをしていないことを確認する必要があります。

ライブラリ内でマップを変更できますか、またはライブラリがデータを処理している間、マップを定数として扱うことができますか? それらを定数として扱うことができる場合は、パラメーター構造体にマップ自体を含める代わりに、マップにハンドルまたはポインターを渡すことを検討してください。

于 2013-03-25T13:46:51.097 に答える