C 模板程式設計中只特化模板類的乙個成員函式

2021-09-07 09:54:44 字數 963 閱讀 8855

模板程式設計中如果要特化或偏特化(區域性特化)乙個類模板,需要特化該類模板的所有成員函式。類模板中大多數成員函式的功能可能是一模一樣的,特化時我們可能只需要重新實現1、2個成員函式即可。在這種情況下,如果全部重寫該模板類的所有成員函式,不但會增加工作量,也不利於**的維護。

例如下面的類模板a,只有在模板引數是char*時才需要特化成員函式func(),但其他的成員函式都不需要特化:

1 template 2 structa

3 11 }; 12 13 intmain() 14

方法一:通過執行時型別識別,這個方法最簡單

1 template 2 structa

3 14 };

方法二:通過類的成員函式模板特化來實現,這個方法也比較簡單

1 template 2 structa

3 12 13 template <> 14 void funcimpl() 15 18 19 voidfunc() 20 23 };

方法三:通過乙個巢狀模板類的特化來實現

1 template 2 structa

3 ; 12 13 template<> 14 struct ischarptype 15 ; 18 19 voidfunc() 20 26 };

方法四:先定義乙個巢狀的類模板,通過過載函式實現(函式的引數型別不同)

1 template 2 structa

3 ; 11 12 template 13 void funcimpl(const typeclass<__ty>&) 14 17 18 void funcimpl(const typeclass&) 19 22 23 voidfunc() 24 27 };

c 類模板的偏特化

只有類模板有偏特化,不能部分特例化函式模版,不過可以通過函式過載來實現類似功能。所謂的偏特化是指提供另乙份template定義式,而其本身仍為templatized 也就是說,針對template引數更進一步的條件限制所設計出來的乙個特化版本。這種偏特化的應用在stl中是隨處可見的。比如 templ...

C 類模板 函式模板全特化 偏特化的使用

一 類模板全特化 偏特化 pragma once include程式設計客棧 include template class tc void funtest template class tc void funtest template void tc funtest main.cpp include...

C 中模板特化的概念

1.模板的特化 c 中經常為了避免重複的編碼而需要使用到模板,這是c 泛型程式設計不可或缺的利器。然而通常又有一些特殊的情況,不能直接使用泛型模板展開實現,這時就需要針對某個特殊的型別或者是某一類特殊的型別,而實現乙個特例模板 即模板特化。通常會使用到模板特化的有 應該也只能有 類模板和函式模板。a...