#if
0在c++中我們會遇到如何讓乙個函式能夠接收任意的型別的引數的問題,在c語言中解
決這個問題的方法是使用省略號作為函式的原型,但是省略號引數並不能指定引數具體的
數量因此存在著一定的安全隱患,最近在研究loki庫的可繼承性靜態**的時候發現在c++
中還存在另外一種c++特有的方法,那就是採用模板建構函式和模板轉換運算子。
現在來看看具體的**:
#endif
#include
#include
class
any_t
// 可以從任意型別轉換到any_t的轉換函式
template
t>any_t(t const &){} // 可以從any_t轉換到任意型別的轉換函式 template t>operator t() };int main() #if 0從上面的**可以看出,確實實現了任意型別,但是這種任意型別並沒有儲存什麼實 質性的資料,僅僅只是實現了型別操作,這一點在loki庫的型別操作中可以用來實現任意 型別的型別。這裡僅僅只是給出了這種模板建構函式和模板轉換函式的應用,真正的應用 還主要在型別操作層面上,可以用來實現型別對映操作,同時還可以對任意型別進行一些 額外的操作,這一點在c語言的省略號中是不可能做到的。 好了,到此已經成功的實現了任意型別,具體的應用可以參見loki庫的繼承性判斷的 靜態函式中的省略號應用,可以用來完成型別對映中的「其他型別」的識別功能。具體的 應用還是要看個人的發揮了,在此先寫出來起個拋磚引玉的效果。 特別說明一下,上面的**在g++編譯器和borland c++ 5.5.1 for win32編譯器下編 譯通過。 #endif 1.函式模板的宣告和模板函式的生成 1.1函式模板的宣告 函式模板可以用來建立乙個通用的函式,以支援多種不同的形參,避免過載函式的函式體重複設計。它的最大特點是把函式使用的資料型別作為引數。函式模板的宣告形式為 template 返回型別 函式名 參數列 其中,template是定義模板函式的關鍵字... 1.函式模板的宣告和模板函式的生成 1.1函式模板的宣告 函式模板可以用來建立乙個通用的函式,以支援多種不同的形參,避免過載函式的函式體重複設計。它的最大特點是把函式使用的資料型別作為引數。函式模板的宣告形式為 template 返回型別 函式名 參數列 其中,template是定義模板函式的關鍵字... 1.函式模板的宣告和模板函式的生成 1.1函式模板的宣告 函式模板可以用來建立乙個通用的函式,以支援多種不同的形參,避免過載函式的函式體重複設計。它的最大特點是把函式使用的資料型別作為引數。函式模板的宣告形式為 template 返回型別 函式名 參數列 其中,template是定義模板函式的關鍵字...C 模板 函式模板和模板函式
C 模板 函式模板和模板函式
C 模板 函式模板和模板函式