C 模板實現兩個不同型別的資料相加函式

2021-09-11 07:27:01 字數 938 閱讀 8810

1、最簡單的情況:

templatet add(const t& a, const t& b)  

缺點是不能夠處理不同型別的資料,例如add(100, 100.0f);

2、第二種情況:

templatet1 add1(t1 lhs, t2 rhs)  

這種情況下,能夠處理不同型別的資料,但是有些情況下有些資料精度會丟失,例如:add(100, 100.1f)

3、第三種情況:

這種是根據第二種情況的改良,因為第二種會丟失資料精度主要是因為無法判斷兩個資料型別的精度,從而確定返回值的型別,利用模板trait技巧,我們可以實現。

在寫**之前我們需要先了解typename作用:(1)標識乙個模板引數型別(2)表示後面乙個是乙個型別名

templateclass returntypefun;

templateclass returntypefun;

templateclass returntypefun;

templateclass returnvaluetype

;//因為int和float型別所佔的位元組相同,所以無法通過比較大小來判斷型別的精度,需要偏特化

template<>

class returnvaluetype;

template<>

class returnvaluetype;

templatetypename returnvaluetype::returntype add(t1 left, t2 right)

t::iterator這種名稱,由於iterator具體是型別還是成員變數取決於t的型別實現,所以當我們知道t::iterator是個型別名稱時,如果我們要使用這個型別名,前面必須要加typename.

C 合併兩個不同型別集合資料

2019 09 30 10 28 46 dear200892 閱讀數 9 文章標籤 c lambda 合併不同型別集合資料 更多 分類專欄 c 別名 使用lambda表示式來實現left join 先把兩個不同的類資料擺上。public class user 區域編號 public int area...

如何對兩個不同型別的集合進行排序

今天寫 遇到乙個問題,對兩個兩個不同型別的集合進行排序,上網找了一下方法,然後試驗了一下,用隨筆記錄一下整個過程 對集合進行排序,自然而然就想到了集合的排序方法sort 於是開啟反編譯器找到這個方法 以list為例 如下圖 可以看到呼叫的是list類的sort int index,int count...

學習boost模板程式設計 判斷兩個型別是否相同

boost type traits is same.hpp中的is same模板,用於判斷兩個型別是否完全相同。首先,試一下下面函式的作用 template bool is same tester t t bool is same tester int a char b bool c is same...