問:為什麼預設範本參數只允許用於類別範本?為什麼不也適用於成員函式模板呢?
範例:
<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中文網其他相關文章!