类型萃取
类型萃取是基于c++中的模板特化来实现的,是对于模板特化的应用。
关于c++的模板特化
当我们写一个同用的拷贝函数时,我们可以使用mymcpy进行拷贝,但是mymcpy是一个浅拷贝,对于一些基本类型的拷贝效率很高。但是对于要深拷贝的类型来说就不适用了,对于深拷贝我们可以使用for循环的方式来进行。
所以将两者进行结合,当基本类型进行拷贝时使用mymcpy,当自定义类型进行拷贝时使用for循环的方式。
使用函数的方式进行实现
#include <iostream>
#include <cstring>
#include <typeinfo>
#include <string>
using namespace std;
/*
*使用函数进行通用拷贝的实现,但时在基本类型的确定时需要循环,仍然造成一些效率问题
*
*
*/
template<class T>
bool IsBasicType(const T* Type){
const char* type_arr[] = { "int" , "char" , "float" , "double" , "long" , "short" , "long long" }; //这里仅列举了部分的基本类型
for(int i = 0 ; i < sizeof(type_arr)/sizeof(type_arr[0]); ++i)
{
if(strcmp(type_arr[i] , Type) == 0)
return true;
return false;
}
}
template<class T>
void Copy(T* dest , T* src, size_t size){
if(IsBasicType(typeid(T).name()))
memcpy(d