В любом сценарии, который может возникнуть подобным образом, при условии, что для вашего класса A
определен метод operator==()
, и он неявно преобразуется в конкретный тип, с которым сравнивается (т. Е. Явное приведение не требуется), то нет проблем.В противном случае вы получите ошибку компилятора, что хорошо, так как она указывает на ваши ошибки во время компиляции, а не во время выполнения.
Например, представьте себе ваш класс A
определяется следующим образом:
template<typename T>
class A
{
private:
T b;
public:
A(): b(0) {}
const T& value() const { return b; }
template<typename U>
bool operator==(const U& compare) { return compare.value() == b; }
};
Тогда до тех пор, пока:
- Тип объекта сравнения
U
имеет метод с именем value()
, который можно вызывать для извлечения его внутреннего объекта.private "value" - Какой бы тип
U::value()
не возвращался, он сопоставим (и неявно конвертируем) с вашим шаблоном T
type
У вас все в порядке.В противном случае вы получите ошибку компилятора с жалобой на один из этих двух пунктов.