Boost-源碼分析筆記2-is-array

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

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


title: Boost 源碼分析筆記2 - is_array
mathjax: true
date: 2020-03-17 15:19:27
categories: [c++筆記,Boost源碼分析筆記]
tags: [c++筆記,Boost源碼分析筆記]
keywords: [c++筆記,Boost源碼分析筆記]


is array

   要先看下面的筆記,才能看懂此篇。
{% post_link ‘Boost-源碼分析筆記3-integral-constant’ 點我開始閱讀 %}

實現

   is array的實現非常簡單,我們先假設所有的都不是array,即如第四行所示,然後利用偏特化,特判掉所有的array即可,讓他們繼承true_type,這樣我們在使用的時候用::value即可判斷。

#if defined( __CODEGEARC__ )
   template <class T> struct is_array : public integral_constant<bool, __is_array(T)> {};
#else
   template <class T> struct is_array : public false_type {};
#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
   template <class T, std::size_t N> struct is_array<T[N]> : public true_type {};
   template <class T, std::size_t N> struct is_array<T const[N]> : public true_type{};
   template <class T, std::size_t N> struct is_array<T volatile[N]> : public true_type{};
   template <class T, std::size_t N> struct is_array<T const volatile[N]> : public true_type{};
#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(__IBMCPP__) &&  !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
   template <class T> struct is_array<T[]> : public true_type{};
   template <class T> struct is_array<T const[]> : public true_type{};
   template <class T> struct is_array<T const volatile[]> : public true_type{};
   template <class T> struct is_array<T volatile[]> : public true_type{};
#endif
#endif
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章