我有这个代码来在vector<Object*> list
中查找对象的ID
int objID = ...
auto it = std::lower_bound(objectPtrList.begin(), objectPtrList.end(), objID,
[](const Object* obj, const Object& id)
{
return obj->worldMoveID < id.worldMoveID;
});
问题是,const Object* obj
正在创建新对象。如何避免?
如果我将const Object* obj
更改为const Object& obj
,它将给我一个错误
错误(xutility(为:
Error C2664 'bool battleCity::ObjectList::removeByMoveID::<lambda_e0fb723f01ea492d40d8d3f19c5f46e6>::operator ()(const battleCity::Object &,const battleCity::Object &) const':
cannot convert argument 1 from 'battleCity::Object *' to 'const battleCity::Object &'
您的对象创建不是来自const Object* obj
,而是来自CCD_ 7(来自不是CCD_ 9的CCD_。
你可以改为:
auto it = std::lower_bound(objectPtrList.begin(), objectPtrList.end(),
objID,
[](const Object* obj, int id) { return obj->worldMoveID < id; });
我怀疑真正的问题不是const Object* obj
,而是const Object& id
,而发生复制是因为objID
实际上不是Object
。C++可以创建临时CCD_ 14以绑定到CCD_。
请注意,您也可以在此处使用std::find_if
。您可以使用一个直接绑定id.worldMoveID
的一元lambda,而不是反复传递它。