Ins*_*oop 4 c++ templates vector
我想设计一个带矢量优化的矢量类.看起来像:
template <typename T, int small_size = 0>
class Vector {
private:
T data_small_[small_size];
T* data_;
T* size_;
T* capacity_;
public:
...
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,大多数情况下,该类将与small_size = 0一起使用.有没有办法删除data_small_ for small_size = 0而不进入模板专门化并重写该类的整个代码?
您可以在此处使用空基优化.您必须更改Vector为不data_small_直接引用.相反,使用write SmallData来实现所需的成员函数并small_size = 0在部分特化中处理这种情况SmallData<T, 0>.下面是一个SmallData实现复制构造函数operator[]并Vector使用它们而不用担心的示例small_size.
template <typename T, int small_size>
class SmallData
{
public:
SmallData(const SmallData& other)
{
for(size_t i = 0; i < small_size; i++)
data_small_[i] = other.data_small_[i];
}
T& operator[](int k){return data_small_[k];}
protected:
T data_small_[small_size];
};
template <typename T>
class SmallData<T, 0>
{
public:
T& operator[](int k){//throw some error}
};
template <typename T, int small_size = 0>
class Vector : public SmallData<T, small_size>
{
public:
Vector(const Vector& other) : SmallData<T, small_size>(other)
{
//rest of copy ctor either here on in the member init list above
}
T& operator[](int k)
{
if(k<small_size) return SmallData<T, small_size>::operator[](k);
else return data_[k];
}
};
Run Code Online (Sandbox Code Playgroud)