我在下面定义了一个GoogleTest操作。
ACTION_P5(ReadAction, aa, bb, cc, dd, ee) {
shared_ptr<DataResponse> response = move(DataResponse::Create());
response->DataV3.a = aa;
response->DataV3.b = bb;
response->DataV3.c = cc;
response->DataV3.d = dd;
response->DataV3.e = ee;
return response;
}
将消息发送到接口时,将调用此函数。结构response
中的前四个值(即a
,b
,c
,d
)是数字。但是第五个是vector
中的uint8_t
。
上述作业是否可以正常工作?我错过了什么吗?由于Action是宏驱动器,因此如何确保类型安全。
答案 0 :(得分:0)
您是说response->DataV3.e
和操作参数ee
是vector<uint8_t>
的类型吗?
如果是,则分配工作正常。它将以您期望的方式工作(通过vector
的赋值运算符的性质进行深度复制)。
一个值得关注的问题是, gmock 内部为内部操作构建了一些数据结构,这导致了几次复制构造。对于大向量,这可能是巨大的开销。如果您想避免那些不需要的副本,则可能需要使用引用包装(例如,使用std::ref
)或将其作为指针传递。然后在真正分配它时复制一次。