std::__are_same 簡單解釋

引言

在std::string中發現了這個函數,但當時並沒有找到這個函數的具體意義,雖然能猜個大概,但始終不算解決 遂在解決後記錄 以幫助其他有相同問題的朋友

cpp_type_traits.h

00115   // Compare for equality of types.
00116   template<typename, typename>
00117     struct __are_same
00118     {
00119       enum { __value = 0 };
00120       typedef __false_type __type;
00121     };
00122 
00123   template<typename _Tp>
00124     struct __are_same<_Tp, _Tp>
00125     {
00126       enum { __value = 1 };
00127       typedef __true_type __type;
00128     };

我們可以看到其實非常簡單 就是如果兩個類型相同 就會匹配第二個類型 如果不相同 就會匹配第一個全特化的版本

我們來看一個使用的實例
以下是C++標準庫迭代器實現中的一個構造函數

stl_iterator.h line 782

	//Allow iterator to const_iterator conversion.
      template<typename _Iter>
        __normal_iterator(const __normal_iterator<_Iter, 
			  typename __enable_if<
      	       (std::__are_same<_Iter, typename _Container::pointer>::__value),
		      _Container>::__type>& __i) _GLIBCXX_NOEXCEPT
        : _M_current(__i.base()) { }

我們可以清楚的看到std::__are_same放在enable_if的第一個參數 利用其中的value成員充當判斷條件 這也是std::__are_same比較常用的一個場合 是元編程的一個基礎工具

但我沒搞清楚爲什麼這樣寫可以使迭代器轉換成const迭代器, 希望知道的朋友能留下寶貴的解答

發佈了111 篇原創文章 · 獲贊 69 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章