模板類別中模板函數的明確專業化:C 中的語法難題
給定的程式碼片段舉例說明了嘗試時出現的程式設計難題在模板類別中明確專門化模板函數。在Microsoft Visual C 2008(VC9)中,程式碼編譯成功;但是,在 Mac 上使用 GCC 4.2 編譯時,相同的程式碼會遇到錯誤。
GCC 要求在類外部聲明顯式特化,但這樣做的正確語法尚不清楚。將顯式特化放在類別外部的最初嘗試(如下所示)是不正確的:
template< typename T > template<> inline void C< T >::f< tag >( T ) {}
正確的方法是將呼叫轉發到部分特化類型的成員函數。以下是修正後的程式碼:
template<class T, class Tag> struct helper { static void f(T); }; template<class T> struct helper<T, tag1> { static void f(T) {} }; template<class T> struct C { // ... template<class Tag> void foo(T t) { helper<T, Tag>::f(t); } };
此修改引入了一個輔助結構,該結構提供所需的功能,同時遵守 GCC 的語法要求。透過將顯式專業化與類別本身分離,程式碼可以成功編譯並按預期運行。
以上是如何在 C 中正確明確地特化模板類別中的模板函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!