首頁  >  文章  >  後端開發  >  為什麼 C 中的類別模板只允許使用預設模板參數?

為什麼 C 中的類別模板只允許使用預設模板參數?

Linda Hamilton
Linda Hamilton原創
2024-10-31 02:14:01758瀏覽

Why are Default Template Arguments Only Allowed for Class Templates in C  ?

預設範本參數:類別範本與成員函數範本

問:為什麼預設範本參數只允許用於類別範本?為什麼不也適用於成員函式模板呢?

範例:

<code class="cpp">struct my_class {
  template<class T = int>
  void mymember(T* vec) {
    // ...
  }
};</code>

依據 C ,預設範本參數僅對類別範本有效。

A: 預設範本參數確實很有用。考慮一個排序函數:

<code class="cpp">template<typename Iterator, 
         typename Comp = std::less<
            typename std::iterator_traits<Iterator>::value_type>>
void sort(Iterator beg, Iterator end, Comp c = Comp()) {
  ...
}</code>

但是,C 中當前限制的基本原理植根於該語言的早期,當時獨立函數被認為不太重要。因此,他們需要從函數參數中推導出所有模板參數,從而排除使用預設值。

此限制妨礙了程式碼彈性以及與成員函數範本的相容性。為了修正這個問題,C 0x 為函數模板引入了預設模板參數。

如C 的創建者Bjarne Stroustrup 在缺陷報告中所述:

「預設模板的禁止函數模板的參數是那個時代的錯誤殘餘,獨立函數被視為二等公民,並要求所有範本參數從函數參數推導而不是指定。變得更加困難。

以上是為什麼 C 中的類別模板只允許使用預設模板參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn