c++ 类型萃取

类型萃取

类型萃取是基于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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值