在chromium中實現了urple,用到了模板特殊化。base/turple.h
來自: http://hi.baidu.com/yzmforever123/item/5ce760521239219408be17a4
模板的特殊化是當模板中的pattern有確定的類型時,模板有一個具體的實現。例如假設我們的類模板pair 包含一個取模計算(module operation)的函數,而我們希望這個函數只有當對象中存儲的數據爲整型(int)的時候才能工作,其他時候,我們需要這個函數總是返回0。這可以通過下面的代碼來實現:
// Template specialization
#include <iostream.h>
template <class T> class pair {
T value1, value2;
public:
pair (T first, T second){
value1=first;
value2=second;
}
T module () {return 0;}
};
template <>
class pair <int> {
int value1, value2;
public:
pair (int first, int second){
value1=first;
value2=second;
}
int module ();
};
template <>
int pair<int>::module() {
return value1%value2;
}
int main () {
pair <int> myints (100,75);
pair <float> myfloats (100.0,75.0);
cout << myints.module() << '\n';
cout << myfloats.module() << '\n';
return 0;
}
250
template <> class class_name <type>
這個特殊化本身也是模板定義的一部分,因此,我們必須在該定義開頭寫template <>。而且因爲它確實爲一個具體類型的特殊定義,通用數據類型在這裏不能夠使用,所以第一對尖括號<> 內必須爲空。在類名稱後面,我們必須將這個特殊化中使用的具體數據類型寫在尖括號<>中。
當我們特殊化模板的一個數據類型的時候,同時還必須重新定義類的所有成員的特殊化實現(如果你仔細看上面的例子,會發現我們不得不在特殊化的定義中包含它自己的構造函數 constructor,雖然它與通用模板中的構造函數是一樣的)。這樣做的原因就是特殊化不會繼承通用模板的任何一個成員。
在chromium的自定義消息的消息參數中用到了template specializing
參考:
http://www.cnblogs.com/alephsoul-alephsoul/archive/2012/10/18/2728753.html