C 17 中的部分類別模板參數推導
C 17 中的類別模板參數推導(CTAD) 使編譯器能夠從提供的參數。雖然此功能允許自動推導,但是否可以部分指定模板參數並將其餘部分留給編譯器推導?
C 17 中的部分推導
目前,CTAD 需要全部或全部模板參數規格。然而,已經有人嘗試透過P1021R0等提案引入部分扣除額。雖然這些提案尚未被接受,但對別名範本 (P1814) 和聚合 (P1816) 的支持已納入 C 20 工作草案中。
解決方法
在由於缺乏本機部分推導,這裡有一個潛在的解決方法:
<code class="cpp">template<class T, class U> using NewBase2 = Base<T, U, double>; // Usage void func() { NewBase2<bool, int> val(1, 2); }</code>
透過引入NewBase2 作為Base的別名,您可以部分指定模板參數(T 和U),同時允許編譯器推導出剩餘的部分一(V) 基於func() 中的用法。
注意: 此解需要明確指定別名範本參數,這在某種程度上違背了 CTAD 的目的。
以上是C 17 能否在類別模板參數推導 (CTAD) 中部分推導模板參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!