模板 型別萃取

2021-08-20 01:49:57 字數 1552 閱讀 8899

當我們在實現資料結構vector時,我們發現使用mencpy時只能實現基本型別的拷貝,而不能實現自定義型別的拷貝,比如說字串型別。這問題如何解決呢?在學習了模板和基於模板的型別萃取之後,我們就有方法是在實現基本型別的拷貝時使用memcpy,在遇到自定義型別時用for迴圈來拷貝。

#pragma once

#include #include #include using namespace std;

struct _truetype

{};struct _falsetype

{};template class _typetraits

;template <>

class _typetraits;

template <>

class _typetraits;

template <>

class _typetraits;

template <>

class _typetraits;

template <>

class _typetraits;

template <>

class _typetraits;

template <>

class _typetraits;

template <>

class _typetraits;

template <>

class _typetraits;

template <>

class _typetraits;

template <>

class _typetraits;

template <>

class _typetraits;

template class _typetraits<_tp>

;template void copy(t* dest, t* src, size_t size, _falsetype)

}#include template void copy(t* dest, t* src, size_t size, _truetype)

#include "typetraits.h"

#include void test()

; char b[10];

copy(b, a, 4, _typetraits::__ispodtype());

string c = ;

string d[10];

copy(d, c, 4, _typetraits::__ispodtype());

}int main()

執行結果為:

這樣的**是如何實現的呢?我們通過呼叫過程來看一看:

上面的這張圖可以一目了然的屢清楚整個過程。

模板的型別萃取

功能型別萃取,在stl中用到的比較多,用於判斷乙個變數是否為pod型別.簡述來說可以用來判斷出某個變數是內建型別還是自定義型別.通過型別萃取,萃取到變數型別,對不同變數進行不同處理,可以提公升程式效率 下面有具體講解 應用場景比如我們實現順序表,在對順序表進行擴容時,就靠重新開闢記憶體 拷貝物件.拷...

模板的型別萃取

鋪墊一下萃取的基礎點 pod 指c風格的struct結構體定義的資料結構,且struct結構體中只能含有常規的資料型別,不能函式自定義型別 函式過載 引數名相同,引數列表不同,返回型別可相同可不相同 模板的特化 模板引數在某個特定型別的具體實現,分為全特化和偏特化。類模板特化 template cl...

模板的型別萃取

初次接觸型別萃取是在運用模板實現seqlist的時候,拷貝構造和賦值運算子過載時,單純的使用memcopy 函式進行拷貝,只是單純的進行了淺拷貝,對於基本的資料型別是不會有任何錯誤的,但是如果是string型別時,單純的值拷貝顯然是不行的 超過了給定的buffer空間時 指向了同一塊開闢的空間,然後...