Boost-源碼分析筆記3-integral-constant

喜歡這篇文章嗎?喜歡的話去看博主的置頂博客,即可依據分類找到此文章的原版得到更好的體驗,

圖片及代碼顯示的問題,筆者深感抱歉,想要更好的體驗去原博文即可。


title: Boost 源碼分析筆記3 - integral_constant
mathjax: true
date: 2020-03-17 15:36:30
categories: [c++筆記,Boost源碼分析筆記]
tags: [c++筆記,Boost源碼分析筆記]
keywords: [c++筆記,Boost源碼分析筆記]


integral_consant

   這也是一個模版元技術,他儲存了自己的類型,模版的類型,模版的值的類型,他的實現如下

 template <class T, T val>
   struct integral_constant
   {
      typedef mpl::integral_c_tag tag;
      typedef T value_type;
      typedef integral_constant<T, val> type;
      static const T value = val;

      operator const mpl::integral_c<T, val>& ()const
      {
         static const char data[sizeof(long)] = { 0 };
         static const void* pdata = data;
         return *(reinterpret_cast<const mpl::integral_c<T, val>*>(pdata));
      }
      BOOST_CONSTEXPR operator T()const { return val; }
   };

   這裏很明顯了,value是值,value_type是value的類型,type是自己的類型。

true_type false_type

  這裏就很有意思了,看看就懂

typedef integral_constant<bool, true> true_type;
typedef integral_constant<bool, false> false_type;

   可能有人會問這個有什麼用,其實這樣的,很多時候我們需要爲我們的類添加一個value,表示true或者false,正常的實現方法是寫兩遍,一遍處理全部,另一遍特化false,這樣寫的話,代碼複用就太low了,這時候,其實我們只需要實現一遍基類,派生的時候一個繼承true,另一個繼承false就OK了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章