在C 17 中,類別模板參數推導(CTAD) 允許根據傳遞給a 的參數來推導模板參數函數或構造函數。但是,此過程目前需要指定所有參數或不指定任何參數。
如果可以部分指定範本參數並推導其餘參數,則會出現問題。例如:
<code class="cpp">Base<V = bool> val1(1, 4.); // U & V deduced --> Base<int, double, bool> Base<T = bool, T =int> val2(5.); // V deduced --> Base<bool, int, double></code>
但是,嘗試使用別名範本來實現此目的,例如:
<code class="cpp">template<class T, class U> using Base2 = Base<T, U, double>; void func() { NewBase2 val(1, 2); }</code>
會導致編譯錯誤。
目前,CTAD不支援部分扣除。提出這個特性的論文P1021R0尚未被接受。但是,C 20 可能包括對別名範本 (P1814) 和聚合 (P1816) 的支持,這可以提供解決方法。
以上是## C 17 能否實作部分類別模板參數推導?的詳細內容。更多資訊請關注PHP中文網其他相關文章!