搜尋

首頁  >  問答  >  主體

c++ - STL模板部分特例化。

天蓬老师天蓬老师2803 天前691

全部回覆(2)我來回復

  • 巴扎黑

    巴扎黑2017-04-17 13:05:03

    C++的模板一般是用於泛型(也就是一份程式碼給多種型別共用),但是也可以用於非型別(Non-type template parameter),可以是整數型、字元、布林這些可以透過字面量明確判定等價的類型

    你平常宣告一個型別模板參數可能是 template <typename T>,而這裡Non-type模板參數是 template <bool B>,就這點區別而已。如果要詳細說enable_if這個模板技法,關鍵不是在Non-type,也不是在partial spec,而是在於SFINAE,你學習一下這方面的內容。

    回覆
    0
  • 天蓬老师

    天蓬老师2017-04-17 13:05:03

    enable_if上面寫著template<bool _test>,所以自然要填true/false進去。

    在使用的時候,你會發現如果一個表達式expr的結果為true,那麼enable_if::type就是存在的。所以你就可以寫這樣的程式碼:

    template<typename T>
    __forceinline T Copy(typename enable_if<sizeof(T)>=4, T>::type const& t)
    {
        return t;
    }
    

    來測試一個型別是否不小於4個位元組。如果是原樣返回,如果不是就編譯錯誤。

    回覆
    0
  • 取消回覆