【问题标题】:What is the meaning of the ==<> operator?==<> 运算符的含义是什么?
【发布时间】:2015-10-29 15:17:24
【问题描述】:

查看我同事的一些代码,我遇到了以下情况:

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

在模板类中声明:

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

谁能告诉我==&lt;&gt; 符号表示什么?我希望它与!= 运算符有关。

【问题讨论】:

  • 前一行代码是什么?通常这是什么背景?这与模板有关。
  • 在真空中,这意味着语法错误。
  • 显然是等于、小于或大于运算符。它在无法比较的情况下返回 false。 ;)
  • 符号==&lt;&gt; 表示什么? IMO 它表明如果人们不尝试通过省略“不必要的”空格来“保存”源代码中的那个字节,则可以防止多少 WTF。
  • @Barry:大多数事情不都是这样吗?

标签: c++ templates c++11 operator-overloading


【解决方案1】:

看起来像两个,operator==,它是一个完整的模板实例化或特化&lt;&gt;

不过,我在野外只见过少数这样的人。

鉴于friend,类可能是befriending the template operator


如果您遇到链接器错误,请see this answer 了解原因。

【讨论】:

  • 让我想起运营商--&gt; 上的this question
  • 确实是 operator== 的模板。我在模板类之前见过这个。当删除 时,您将收到一个错误,指示该函数是非模板函数。
【解决方案2】:

您的问题不完整。

据推测,在您正在检查的代码中的某些上下文中,有一个模板化的 operator==() 函数。

然后在某个类中,模板化 operator==() 的特定特化被声明为 friend

如果没有您没有给出的上下文(即前面的模板定义或封闭类定义的上下文),就不可能给出更具体的答案。模板或相关专业有太多可能性。

【讨论】:

    【解决方案3】:

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

    内部template &lt;typename T&gt; class ValueIter

    • friend bool operator==(ValueIter const &amp;rhs, ValueIter const &amp;lhs);
      friend bool operator==(ValueIter&lt;T&gt; const &amp;rhs, ValueIter&lt;T&gt; const &amp;lhs);
      为非模板运算符添加友谊。

    • friend bool operator==&lt;&gt;(ValueIter const &amp;rhs, ValueIter const &amp;lhs);,
      friend bool operator==&lt;&gt;(ValueIter&lt;T&gt; const &amp;rhs, ValueIter&lt;T&gt; const friend bool operator==&lt;T&gt;(ValueIter const &amp;rhs, ValueIter const &amp;lhs);,
      friend bool operator==&lt;T&gt;(ValueIter&lt;T&gt; const &amp;rhs, ValueIter&lt;T&gt; const
      为模板运算符添加友谊(仅适用于匹配T的类型)

    • template &lt;typename U&gt; friend bool operator==(ValueIter&lt;U&gt; const &amp;rhs, ValueIter&lt;U&gt; const &amp;lhs); 为模板运算符添加友谊(适用于任何类型 U(可能与 T 不同))

    ==&lt;&gt;用在第二点,真的是== &lt;&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-28
      • 1970-01-01
      • 1970-01-01
      • 2015-07-16
      • 2019-09-12
      相关资源
      最近更新 更多