我有一个旧的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
)
答案 0 :(得分:1)
我需要确定结构的完整定义,但这应该有效:
m_agents[idx].params = *params;
对于POD类型,它将与memcpy做同样的事情。对于非POD类型,它将调用它们的赋值运算符。
答案 1 :(得分:1)
用
替换它m_agents[idx].params = *params;
将更正该实例。但是,假设您正在使用的C库始终假设POD是合理的,因此您需要检查整个代码库以确保它没有做任何会破坏其他地方的事情。
您的地图在库中是否可变,或者在库处理数据时您是否可以将它们视为常量?如果您可以将它们视为常量,请考虑将句柄或指针传递给映射到库中,而不是将映射本身包含在参数struct中。