Обычно, когда я делаю std:: find, я помещаю предикат в качестве третьего аргумента, но на этот раз я думал, что сделаю это по-другому, я не понимаю, почему он не работает.
#include <iostream>
#include <vector>
#include <algorithm>
struct RenderJob
{
RenderJob() {};
int renderJob_ID;
bool operator==(RenderJob& rhs) { return rhs.renderJob_ID == this->renderJob_ID; }
};
int main()
{
RenderJob foo;
RenderJob foo2;
foo == foo2; // Works
std::vector<RenderJob> renderJobs;
std::find(renderJobs.begin(), renderJobs.end(), foo); // Doesn't work
}
binary "==" не найден оператор, который принимает левый операнд тип RenderJob (или нет приемлемого преобразования)
Изменить:: Хорошо спасибо за ответы. Вот несколько примеров того, почему он терпит неудачу
RenderJob foo;
RenderJob foo2;
foo == foo2; // Works
std::vector<RenderJob> renderJobs;
std::vector<RenderJob>::const_iterator constit = renderJobs.begin();
*constit == foo2; // Doesn't work
Еще проще в качестве иллюстрации:
const RenderJob* pToRenderJob;
*pToRenderJob == foo2; // This fails because the pointed to
// object is const, and cannot call the
// operator== function because the actual function
// definition is not const.
Если бы это было наоборот:
foo2 == *pToRenderJob; // This would fail because the
// operator==(RenderJob&) the actual argument
// is not const. Very subtle rules