首頁 > 後端開發 > C++ > 如何檢查 C 中是否存在非成員 `operator==` ?

如何檢查 C 中是否存在非成員 `operator==` ?

Mary-Kate Olsen
發布: 2024-12-02 16:50:11
原創
813 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板