-1

我有一个我尝试修改的旧 C 库。有这样一行:

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

当然,C stule pod 之类的值和结构也会被复制。但我尝试添加params.some_struct.some_inner_map_field std::map,但它没有在 memcpy 上初始化。

所以我想知道如何复制我的地图使其保持活力?(如果可能,不要扩展paramsand的方法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 回答