c++:类型萃取的实现

关于类型萃取的必要性,我在之前的文章有说过,附上链接:
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::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;
}

想要读懂这段代码不容易,我总结一下:
c++:类型萃取的实现_第1张图片
c++:类型萃取的实现_第2张图片
通过TypeCopy,那么就可以根据类型来确定拷贝方案。

你可能感兴趣的:(c++)