Подтвердить что ты не робот

В чем смысл оператора == <>?

Взяв какой-то код моего коллеги, я пришел к следующему:

friend bool operator==<>(ValueIter<Type> const &rhs, ValueIter<Type> const &lhs);

Он объявлен в классе шаблона:

template<typename Type>
class ValueIter: public std::iterator<std::bidirectional_iterator_tag, Type>

Может ли кто-нибудь сказать мне, что означает символ ==<>? Я ожидаю, что это с чем-то связано с оператором !=.

4b9b3361

Ответ 1

Он выглядит как два, operator== - это полный экземпляр шаблона или специализация <>.

Я видел только несколько подобных в дикой природе.

Учитывая friend, класс, вероятно, подружился с оператором шаблона.


Если у вас возникают ошибки компоновщика, см. этот ответ, почему.

Ответ 2

Ваш вопрос неполный.

Предположительно, в некотором контексте в рамках кода, который вы просматриваете, существует шаблонная функция operator==().

Затем в каком-то классе определенная специализация шаблона operator==() объявляется как friend.

Без контекста, который вы не указали (т.е. из предыдущего определения шаблона или определения охватывающего класса), невозможно дать более конкретный ответ. Существует слишком много возможностей для шаблона или соответствующих специализаций.

Ответ 3

С

template <typename T> class ValueIter;

template <typename T> 
bool operator==(ValueIter<T> const &rhs, ValueIter<T> const &lhs);

Внутри template <typename T> class ValueIter

  • friend bool operator==(ValueIter const &rhs, ValueIter const &lhs);
    и friend bool operator==(ValueIter<T> const &rhs, ValueIter<T> const &lhs);
    добавьте дружбу к оператору без шаблонов.

  • friend bool operator==<>(ValueIter const &rhs, ValueIter const &lhs);,
    friend bool operator==<>(ValueIter<T> const &rhs, ValueIter<T> const friend bool operator==<T>(ValueIter const &rhs, ValueIter const &lhs);,
    friend bool operator==<T>(ValueIter<T> const &rhs, ValueIter<T> const
    добавьте дружбу к оператору шаблона (только для типа с совпадением T)

  • template <typename U> friend bool operator==(ValueIter<U> const &rhs, ValueIter<U> const &lhs); добавить дружбу к оператору шаблона (для любого типа U (который может отличаться от T))

==<> используется во второй точке и действительно == <>.