首頁  >  文章  >  後端開發  >  C 17 能否在類別模板參數推導 (CTAD) 中部分推導模板參數?

C 17 能否在類別模板參數推導 (CTAD) 中部分推導模板參數?

DDD
DDD原創
2024-10-25 06:38:02638瀏覽

Can C  17 Partially Deduct Template Arguments in Class Template Argument Deduction (CTAD)?

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中文網其他相關文章!

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