IF, и только тогда, когда у вас есть вся информация, необходимая для определения равенства, то нет никаких проблем, чтобы определить функцию самостоятельно:
//not sure what GdkColor contains, but if it is large pass by const &
bool operator==(GdkColor a, GdkColor b) {
//check equality here
return result;
}
operator==
не должны быть членом функция.
Если у вас нет возможности сравнить два экземпляра GdkColor, вы не можете узнать, равны ли они. Мертвый просто. Если в структуре нет метода, который позволяет определить равенство, он, вероятно, делает это по уважительной причине. Обычно это было бы чем-то, где не было ни <,>,<=, >=, !=, ==
, ни что-либо сопоставимое, и доступ к членам, которые определяли бы отношение равенства, вообще невозможен. Я не помню, чтобы было желание реализовать operator==
, где это было так. Однако, если вам нужно заставить API ограничиться для реализации сравнения равенства, вы должны выяснить, почему это так.
Типичный случай, когда у вас не будет доступа, будет библиотека C, которая использует typedef
, чтобы сделать struct
непрозрачным. Однако, если он предназначен для вас, чтобы манипулировать содержимое структуры или сравнить их, рамки будут представлять собой либо что-то вроде
xxx getInformationXXX(struct S)
или методом int compare(struct S*, struct S*)
Я не знаком с GdkColor, но я полагаю, существует некоторая общедоступная информация, которая позволяет вам определить, равны ли два экземпляра. Вы должны рассмотреть возможность включения этой функции в пространство имен, на всякий случай GdkColor когда-либо реализует operator==
, чтобы избежать устранения неоднозначности.
Я могу заставить его работать таким образом ... но что, если я не знаю внутренних компонентов GdkColor? – basav
@basav Если вы не знаете внутренности, вы не можете сравнить его, не так ли? Вы можете сравнивать их адреса. – Matt