首頁 >後端開發 >C++ >為什麼我的 C 模板參數推導在非推導上下文中失敗?

為什麼我的 C 模板參數推導在非推導上下文中失敗?

Barbara Streisand
Barbara Streisand原創
2024-12-06 09:45:13945瀏覽

Why Does My C   Template Argument Deduction Fail in Nondeduced Contexts?

模板參數推導失敗:了解非推導上下文

在您的程式碼中,您定義了兩個函數(temp 和temp2) ,它們旨在根據參數類型推導模板實參。但是,您會遇到編譯器錯誤,指出它無法推斷這些參數。

問題源自於在函數定義中使用 typename 關鍵字:

// Example 1
template <class A>
A temp(typename S<A>::type a1)

// Example 2
template <class A, class B>
B temp2(typename S<A>::type a1, B a2)

使用範本範本參數時, typename 是引用範本類別中的依賴名稱所必需的。然而,在函數的上下文中並非如此,其中 S::type 只是一個非依賴類型。

在 C 中,當模板參數用於決定其類型的上下文。但是,在本例中,模板參數 A 在非推導上下文中使用,因為它僅出現在引用類型的聲明中:

typedef typename T& type;

因此,編譯器無法從函數呼叫。要解決此問題,您需要在呼叫這些函數時明確指定模板參數:

temp<char>(c);

透過提供明確參數,編譯器能夠使用適當的類型正確實例化模板。

以上是為什麼我的 C 模板參數推導在非推導上下文中失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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