當我們在實現資料結構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空間時 指向了同一塊開闢的空間,然後...