"==<>"操作符的含义是什么?"

21

研究同事的一些代码时,我发现了以下内容:

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

这是在一个模板类中声明的:

template<typename Type>
class ValueIter: public std::iterator<std::bidirectional_iterator_tag, Type>
有人能告诉我 ==<> 符号代表什么吗?我想这应该与 != 运算符有关。

4
前一行代码是什么?通常情况下这是与模板相关的上下文。 - Aaron McDaid
4
在上下文缺失的情况下,它意味着语法错误。 - Barry
13
显然,这是等于、小于或大于运算符。对于无法比较的值返回 false。;) - Yakk - Adam Nevraumont
符号 ==<> 表示什么?在我看来,它表示如果人们不试图通过省略“不必要”的空格来“节省”源代码中的一个字节,那么可以避免多少 WTF。 - user719662
2
@Barry:这不是大多数事情的真相吗? - ruakh
3个回答

32

看起来有两个,一个是完整的模板实例化或专门化的operator==<>

我在实际使用中只见过很少这样的情况。

鉴于友元,该类可能正在为模板运算符友元而设置的操作


如果您遇到链接器错误,请参阅此答案了解原因。


13
这让我想起了关于操作符-->这个问题 - Niall
3
确实是operator==的模板。我在模板类之前就见过这种用法。当你去掉尖括号<>时,会出现一个错误提示,表明该函数是非模板函数。 - Michiel uit het Broek

6
您的问题不完整。
可能在您正在检查的代码上下文中,有一个模板化的operator==()函数。
然后,在某个类中,该模板化的operator==()的特定专业化被声明为friend
如果没有给出您没有给出的上下文(即前面的模板定义或封闭类定义),则无法给出更具体的答案。有太多可能性来解释模板或相关的专业化。

5

随着

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不同))

==<> 在第二点中使用,实际上是 == <>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接