模板函數內的模板成員函數呼叫
在給定的程式碼中,嘗試在模板函數g 內呼叫模板成員函數f因編譯錯誤而失敗:
<code class="cpp">template<class X> struct A { template<int I> void f() {} }; template<class T> void g() { A<T> a; a.f<3>(); // Compilation fails here (Line 18) }</code>
根據C 標準(14.2/4),當在. 之後調用成員模板特化時,必須明確指定模板關鍵字以將其與非模板成員函數。
要解決編譯錯誤,程式碼應修改如下:
<code class="cpp">template<class T> void g() { A<T> a; a.template f<3>(); // add `template` keyword here }</code>
透過新增template 關鍵字,編譯器會辨識呼叫的函式是成員模板專業化,解決歧義並允許程式碼成功編譯。
以上是為什麼在 C 中模板函數內的模板成員函數呼叫失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!