顯式指定函式模板的形參使用的型別

2021-06-05 22:23:39 字數 565 閱讀 6437

在某些情況下,不可能推斷模板實參的型別。當函式的返回型別必須與形參

表中所用的所有型別都不同時,最常出現這一問題。在這種情況下,有必要覆蓋

模板實參推斷機制,並顯式指定為模板形參所用的型別或值。

方法一:可能是強制 sum 的呼叫者將較小的型別強制轉換為希望作為結果使用的型別

template t sum(t, u);

int i; short s;

sum(static_cast(s), i);

方法二:增加了乙個模板形參以指定返回型別

template

t1 sum(t2, t3);

注意:顯式模板實參從左至右對應模板形參相匹配,第乙個模板實參與第乙個模板

形參匹配,第二個實參與第二個形參匹配,以此類推。

template

t3 alternative_sum(t2, t1);

long val2 = alternative_sum(i, lng); //必須這麼寫

C 函式模板的顯式具體化

功能 c 模板的顯式具體化練習。常規模板 add加法模板,採用顯式具體化模板方式,具體化乙個複數相加的add函式。總結 顯式具體化是針對常規模板進行的,因此必須與常規模板的定義格式相符合。如下程式所示,除any型別可以用乙個具體化的c 型別 替換外,其它應該保持與常規模板一致,否則可能不能進行編譯 ...

C 函式模板的顯式具體化

我們知道可以利用函式模板來處理不同的資料型別,然而函式模板對於某些資料型別並不能處理,具有一定的侷限性。那麼應該如何解決該侷限性呢?例如經典的資料交換函式swap template typename t void swap t a,t b 我們可能希望利用上述的函式模板實現不同型別資料的交換,然而對...

C 函式模板的顯式具體化

在c 中,我們可以使用函式模板來增加 的復用性,但是並不是所有的型別都可以呼叫函式函式模板來處理,如陣列和結構體資料型別。這就是函式模板的侷限性。struct job 交換兩個這種結構的內容,原來的模板使用以下 進行交換 temp a a b b temp 由於c 允許將乙個結構賦給另乙個結構,因此...