首頁 >後端開發 >C++ >為什麼預設模板參數不能用於 C 中的成員函數模板?

為什麼預設模板參數不能用於 C 中的成員函數模板?

Patricia Arquette
Patricia Arquette原創
2024-10-27 12:38:01996瀏覽

Why Can't Default Template Arguments Be Used for Member Function Templates in C  ?

預設模板參數:為什麼僅限於類別模板?

在 C 中,預設模板參數僅允許用於類別模板。此限制提出了為什麼不能為成員函數模板定義此類參數的問題。

考慮以下範例:

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

在此範例中,嘗試定義預設類型用於成員函數範本內的範本參數 T,但 C 不允許此語法。相反,預設模板參數嚴格限於類別模板。

限制背後的原因

禁止函數模板使用預設模板參數源自於歷史原因。在 C 的早期版本中,獨立函數並未完全整合到該語言的模板系統中。為了鼓勵使用被認為更慣用的成員函數模板,預設模板參數被限制為類別模板。

但是,此限制後來被認為是一種限制,因為它不必要地區分成員函數模板和獨立的功能模板。正如Bjarne Stroustrup 在缺陷報告中指出的那樣:

「禁止函數模板使用預設模板參數是一個錯誤的殘餘......[它]不必要地使獨立函數與成員函數不同,從而嚴重限制了程式設計風格."

C 0x 更新

為了回應這些問題,C 0x 為獨立函數模板引入了預設模板參數。此更改允許模板編程更加靈活和一致。

範例

考慮以下C 0x 程式碼:

<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>

在此範例中,為Comp 範本參數指定了一個預設範本實參,允許排序演算法預設使用標準的less 比較函數。

以上是為什麼預設模板參數不能用於 C 中的成員函數模板?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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