仿函式和模版的模板引數

2021-08-15 10:49:05 字數 1192 閱讀 2189

型別萃取被整理到stl迭代器剖析裡賣了!!在那裡面說的更清楚!

模版的模板引數主要使用在類的類成員也是個模板類,當你想只輸入乙個模板引數,就可以同時對類內的其他類成員傳入相同的模板引數的時候就可以使用咯

1 #include2 

3 using namespace std;

4 5

6 7 template8 class class1

9 ;12 13 template < class t, template< class> class class1 >

14 class class2 15 ;

這個就是模板的模版引數的乙個簡單實現,用來實現類的類成員和該類模板使用型別一致的方法

那什麼是仿函式呢,仿函式是stl庫中經常使用的一種手法

仿函式可以通過結構體內部定義一些operator()實現一種類似函式的方法,通過模板傳參就可以使用,仿函式並不是真正的函式,是通過模板和結構體(或者是類)實現的,類似函式的體制,仿函式可以用在**的重用上,可以減少冗餘的部分**,例如可以將比較大小整合成乙個仿函式,在使用的時候就可以省去很多**

1 template

2struct

hashfuncer38

};910 template<>

11struct hashfuncer

1222

return (hash & 0x7fffffff);//

八成是想取個正數23}

24 size_t operator()(const

string &key, size_t _capacity)

2528

};29

3031

3233

34 template

35class

hashtable

36;

這裡貼出我寫的雜湊表的部分**,這裡就是用了仿函式,目的是處理不同的結構,當雜湊表存入的是int型別,和當雜湊表存入的是string型別時,呼叫的仿函式是不同的(我對仿函式的模板進行了特化),下邊貼一下呼叫仿函式的**

1 size_t hashfuner(const k&key,size_t capacity) 2

因為hashfun是乙個結構體,所以構造乙個匿名變數呼叫operator()方法,再進行封裝

這樣看起來就跟函式差不多了,不是麼

仿函式和模版的模板引數

型別萃取被整理到stl迭代器剖析裡賣了!在那裡面說的更清楚!模版的模板引數主要使用在類的類成員也是個模板類,當你想只輸入乙個模板引數,就可以同時對類內的其他類成員傳入相同的模板引數的時候就可以使用咯 1 include2 3 using namespacestd 4 5 6 7 template8 ...

函式模版和模版函式,類模版和模版類的區別

什麼是函式模板和類模板 函式模板是一種抽象函式定義,它代表一類同構函式。通過使用者提供的具體引數,c 編譯器在編譯時刻能夠將函式模板例項化,根據同乙個模板建立出不同的具體函式,這些函式之間的不同之處主要在於函式內部一些資料型別的不同,而由模板建立的函式的使用方法與一般函式的使用方法相同。函式模板的定...

模板引數和模板的模板引數實現棧和佇列

include using namespace std 利用順序表實現棧 if 0 template class stack stack const t arr,size t sz ptr new t sz capacity sz size sz 元素入棧 void push t data 元素出棧...