何为类型萃取
类型萃取表面意思就是在合适的时机帮助我们选择合适的对象。
然而怎么去实现类型萃取,这个其实与模板的联系比较紧密。
给个案例,可以体会一下。
struct FalseType
{
bool Get()
{
return false;
}
};
struct TrueType
{
bool Get()
{
return true;
}
};template<class T>
struct TypeTraits
{
typedef FalseType IsPodType;
};
template<>
struct TypeTraits<int>
{
typedef TrueType IsPodType;
};...//特化所有内置类型
void Reserve(size_t n)
{
if (n > Capacity())
{
size_t size = Size();
T* tmp = new T[n];
if (size > 0)
{
if (TypeTraits<T>::IsPodType().Get())
{
memcpy(this->_start, tmp, sizeof(T)*size);
}
else
{
for (int i = 0; i < size; i++)
{
tmp[i] = _start[i];
}
}
delete[] _start;
}
_start = tmp;
_finish = _start + size;
_endofstorage = _start + n;
}
}

浙公网安备 33010602011771号