程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> [c++11]編譯期間判斷兩個類型的實例是否可以應用等於運算符

[c++11]編譯期間判斷兩個類型的實例是否可以應用等於運算符

編輯:C++入門知識

標題十分地長的樣子、

我主要是想有兩個類型分別是 A 和 B 的變量 a、b,能否在在編譯期間獲得一個 bool 常量,表示是否擁有 a == b 這樣的運算。

 #include <type_traits>
 
                 template<             typename =                 static_cast<Dest>                 std::declval<Src>()))>
           __test( 
         template<typename, typename>
            
               template<typename TA, typename TB>
          __implicit_conv = 
                  __static_castable::__test<
                          std::declval<TA>                      == std::declval<TB>                 ), >(  
         template<             typename =                 std::declval<TA>              == std::declval<TB>())>
          __implicit_conv<TA, TB> __test( 
         template<typename, typename>
            
     template<typename A, typename B>
      has_equal_operator = std::is_same<         decltype(__has_equal_operator_impl::__test<A, B>())> }

然後我們來看看測試的結果

     
 #include <iostream>
 
 
 template<typename A, typename B>
       std::cout <<         << bw::has_equal_operator<A, B>::value <<  
               == ( A&,  B& A  == ( A&,  C& D  == ( B&,  C& 
       
     output_result<A, B>     
     output_result<B, A>     
     output_result<A, C>     
     output_result<B, C>     
     output_result<, >     
     output_result<, >     
     output_result<, >     
     output_result<decltype(std::cout), >       }

這有什麼用呢0 0、

你會發現如果你寫了一個類似 delegate 的東西,在刪除函數的時候(如果是仿函數之類的,沒有比較運算符)會得到十分多的編譯錯誤,

有了這個東西我們就可以根據是否有 == 運算符來提供不同的比較行為,有就使用它、沒有就使用自己定義的(比如說比較內存,或者直接 true)

雖然不能保證語義的正確,但是在某些情況下(比如 delegate),還是比較好的。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved