关于类型萃取的必要性,我在之前的文章有说过,附上链接:
https://blog.csdn.net/han8040laixin/article/details/81738118
struct __TrueType//一个空类
{};
struct __FalseType//空类
{};
template <class T>
struct __TypeTraits
{
typedef __FalseType ISPODType; //默认为不是基本类型 POD(基本类型)
};
template <>
struct __TypeTraits<int>
{
typedef __TrueType ISPODType; //int是基本类型
};
template <class T>
T* TypeCopy(T* dst, const T* src, size_t n)
{
return __TypeCopy(dst, src, n, __TypeTraits<T>::ISPODType());
}
template <class T>
T* __TypeCopy(T* dst, const T* src, size_t n,__TrueType)
{
cout << "memcpy()" << endl;
return (T*)memcpy(dst, src, n*sizeof(T));
}
template <class T>
T* __TypeCopy(T* dst, const T* src, size_t n, __FalseType)
{
for (size_t i = 0; i < n; i++)
{
dst[i] = src[i];
}
cout << "operator=()" << endl;
return dst;
}
想要读懂这段代码不容易,我总结一下:
通过TypeCopy,那么就可以根据类型来确定拷贝方案。