函数类模板萃取主要针对的是含有自定义类型的函数
***我们的类型函数如果需要拷贝往往可以通过给定库函数经行萃取,但是尼?***我们的类型函数类型中每一个变量中含有的成员个数都是不知道的,我们就需要另外一种拷贝深拷贝的方式,对我们的自定义类型经行处理。
好了,我们定义一种不需要传递第三参数的方法类型萃取一下。
定义自定义类型和内置类型
// 代表内置类型
struct TrueType
{
static bool Get()
{
return true ;
}
};
// 代表自定义类型
struct FalseType
{
static bool Get()
{
return false ;
}
};
分类特化一下,每一种类型认为有区别都进行特化一下
template<class T>
struct TypeTraits
{
typedef FalseType IsPODType;
};
template<>
struct TypeTraits<char>
{
typedef TrueType IsPODType;
};
template<>
struct TypeTraits<short>
{
typedef TrueType IsPODType;
};
template<> struct TypeTraits<int>
{
typedef TrueType IsPODType;
};
template<>
struct TypeTraits<long>
{
typedef TrueType IsPODType;
};
copy拷贝对象确定实际类型
template<class T>
void Copy(T* dst, const T* src, size_t size)
{
if (TypeTraits<T>::IsPODType::Get())
memcpy(dst, src, sizeof(T)*size);
else {
for (size_t i = 0; i < size; ++i)
dst[i] = src[i];
}
}
添加各种类型变量测试一下
int main()
{
int a1[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
int a2[10];
Copy(a2, a1, 10);
string s1[] = { "1111", "2222", "3333", "4444" };
string s2[4];
Copy(s2, s1, 4);
return 0;
}
自定义类型和内置类型的拷贝萃取都没有什么问题