首页 >后端开发 >C++ >如何检查 C 中是否存在非成员 `operator==` ?

如何检查 C 中是否存在非成员 `operator==` ?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-02 16:50:11811浏览

How Can I Check for the Existence of a Non-Member `operator==` in C  ?

检查 C 中非成员运算符 == 的存在

在 C 中,使用提供的方法检查成员函数运算符 == 是否存在非常简单成员函数。然而,确定非成员运算符==的存在可能更具挑战性。

C 03 方法:

可以采用以下技术来检查任何运算符的存在性:

namespace CHECK
{
  class No { bool b[2]; };
  template<typename T, typename Arg> No operator== (const T&amp;, const Arg&amp;);

  bool Check (...);
  No&amp; Check (const No&amp;);

  template <typename T, typename Arg = T>
  struct EqualExists
  {
    enum { value = (sizeof(Check(*(T*)(0) == *(Arg*)(0))) != sizeof(No)) };
  };  
}

要使用此方法,只需调用 EqualExists模板:

CHECK::EqualExists<A>::value;

如果 EqualExists 值非零,则非成员运算符 == 存在。

C 11 方法:

C 11 提供了一种使用 decltype 和std::declval:

namespace CHECK
{
  struct No {}; 
  template<typename T, typename Arg> No operator== (const T&amp;, const Arg&amp;);

  template<typename T, typename Arg = T>
  struct EqualExists
  {
    enum { value = !std::is_same<decltype(std::declval<T>() < std::declval<Arg>()), No>::value };
  };  
}

要检查非成员运算符 ==,请使用:

CHECK::EqualExists<A>::value;

以上是如何检查 C 中是否存在非成员 `operator==` ?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn