模板机制实现的代码的复用,但是却引入了新的问题。比如我们有一个Vector模板,我们需要存放int*,double*,char*三种不同的参数,这是就会产成出三套代码,显然这是导致臃肿的原因。
下面看一个例子。
#include <iostream>
using namespace std;
template <typename T>
class zVector
{
public:
zVector(int size = 10):m_size(size),p(new T[size]) {}
~zVector(){
delete p;
}
T& operator[](int index) const {
return p[index];
}
private:
int m_size;
T *p;
};
template <>
class zVector<void*>
{
public:
zVector(int size = 10):m_size(size),p(new void*[size]) {}
~zVector(){
delete p;
}
void*& operator[](int index) const {
return p[index];
}
private:
int m_size;
void* *p;
};
template<typename T>
class zVector<T*> : public zVector<void*>
{
public:
T*& operator [](int index) const {
return (T*&)zVector<void*>::operator [](index);
}
};
int main()
{
zVector<int*> intv;
zVector<double*> doublev;
int i = 1;
double j = 2.11;
intv[0] = &i;
cout << *intv[0] << endl;
doublev[0] = &j;
cout << *doublev[0];
return 0;
}
对于指针的操作我们可以全部使用void*来进行操作,这样只是产生了一套void*的代码,从而大大降低了代码量。