Операторские перегрузки должны иметь хотя бы один определенный пользователем тип. Таким образом, вы не можете перегрузить operator==
для двух указателей, например.
Ваш myClass::operator==(const myClass *temp)
действителен в том смысле, что он компилируется, но имеет очень небольшой смысловой смысл и не рекомендуется (есть очень мало ситуаций, в которых вы хотите сделать T x; T *y; ... (x == y)
).
Для вашей ситуации, когда у вас есть вектор указателей, вы можете рассмотреть std::find_if
, который принимает предикат . Что-то вроде:
class CompareByPointer
{
public:
explicit CompareByPointer(const myClass &p) : p(p) {}
bool operator() (const myClass &rhs) const { return p->data == rhs->data; }
private:
const myClass &p;
};
...
find_if(myVec.begin(), myVec.end(), CompareByPointer(&temp2));
[Как примечание, вы должны, как правило, определять функции-члены const
, где это возможно. Таким образом, перегрузки вашего оператора должны быть const
.]