隱式類型轉換和模板推導
在C 語言中,模板參數推導是一種允許根據類型參數自動推斷出類型參數的機制。函數參數。然而,模板推導中的隱式類型轉換是有限制的。
考慮下面的程式碼片段:
<code class="cpp">#include<iostream> using namespace std; template<typename Dtype> class Scalar{ public: Scalar(Dtype v) : value_(v){} private: Dtype value_; }; template<typename Dtype> void func(int a, Scalar<Dtype> b){ cout << "ok" <<endl; } int main(){ int a = 1; func(a, 2); // error: no matching function for call to ‘func(int&, int)’ return 0; }
這裡,目標是使用整數呼叫 func() 模板函數a 和隱式轉換的 Scalar
理解錯誤
編譯器無法執行模板參數推導,因為:
解決方案選項
要解決此問題,可以採取多種方法:
在呼叫方明確轉換:
在呼叫方手動轉換參數:
<code class="cpp">func(a, Scalar<int>{2});</code>
推導指引(C 17 ):
<code class="cpp">func(a, Scalar{2});</code>
<code class="cpp">func<int>(a, 2); </code>
結論
結論結論結論結論結論 C 中的模板參數推導是一種強大的機制,但在處理使用者定義的轉換時它有其限制。透過利用所討論的解決方案,開發人員可以確保使用預期的類型參數來呼叫模板函數。以上是為什麼模板參數推導中隱式類型轉換失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!