標題十分地長的樣子、
我主要是想有兩個類型分別是 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),還是比較好的。