下面是代码
#include能够运行且符合我的期望,不过这个是我写的。书上的例子是这个using namespace std;#include template class zVector{public: /** * @brief zVector * @param size */ zVector(int size = 10):m_size(size),p(new T[size]) {} ~zVector(){ delete p; } /** * @brief operator [] * @param index * @return */ T& operator[](int index) const { return p[index]; }private: int m_size; T *p;};template <>class zVector {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;};//typedef zVector zvVector;template class zVector : public zVector {public: T*& operator [](int index) const { return (T*&)zVector ::operator [](index); }};//template //class zVector : public zvVector//{//public:// T*& operator [](int index) const {// return (T*&)zvVector::operator [](index);// }//};int main(){ zVector intv; zVector doublev; int i = 1; double j = 2.11; intv[0] = &i; cout << *intv[0] << endl; doublev[0] = &j; cout << *doublev[0]; return 0;}
#includeusing namespace std;#include template class zVector{public: /** * @brief zVector * @param size */ zVector(int size = 10):m_size(size),p(new T[size]) {} ~zVector(){ delete p; } /** * @brief operator [] * @param index * @return */ T& operator[](int index) const { return p[index]; }private: int m_size; T *p;};//template <>//class zVector //{//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;//};typedef zVector zvVector;//template //class zVector : public zVector //{//public:// T*& operator [](int index) const {// return (T*&)zVector ::operator [](index);// }//};template class zVector : public zvVector{public: T*& operator [](int index) const { return (T*&)zvVector::operator [](index); }};int main(){ zVector intv; zVector doublev; int i = 1; double j = 2.11; intv[0] = &i; cout << *intv[0] << endl; doublev[0] = &j; cout << *doublev[0]; return 0;}
可是就报错了,
我分析发现好像是 typedef zVector<void*> zvVector; 模板特化没有起到作用 这是其中的一个错误 cannot call member function 'T*& zVector<T*>::operator[](int) const [with T = void]' without object 表示void*没有特化,即没有特化T=void*时的模板,所以报错了。 在第一个中我指定特化了,所以能够运行了。 我使用的编译器是g++4.6.3