C 中模板建構函式和模板轉義運算子的妙用

2021-04-08 14:32:11 字數 960 閱讀 6363

#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

C 模板 函式模板和模板函式

1.函式模板的宣告和模板函式的生成 1.1函式模板的宣告 函式模板可以用來建立乙個通用的函式,以支援多種不同的形參,避免過載函式的函式體重複設計。它的最大特點是把函式使用的資料型別作為引數。函式模板的宣告形式為 template 返回型別 函式名 參數列 其中,template是定義模板函式的關鍵字...

C 模板 函式模板和模板函式

1.函式模板的宣告和模板函式的生成 1.1函式模板的宣告 函式模板可以用來建立乙個通用的函式,以支援多種不同的形參,避免過載函式的函式體重複設計。它的最大特點是把函式使用的資料型別作為引數。函式模板的宣告形式為 template 返回型別 函式名 參數列 其中,template是定義模板函式的關鍵字...

C 模板 函式模板和模板函式

1.函式模板的宣告和模板函式的生成 1.1函式模板的宣告 函式模板可以用來建立乙個通用的函式,以支援多種不同的形參,避免過載函式的函式體重複設計。它的最大特點是把函式使用的資料型別作為引數。函式模板的宣告形式為 template 返回型別 函式名 參數列 其中,template是定義模板函式的關鍵字...