## 模板特化疑问 原

首席吹牛官

最近在学习模板，对模板特化做了一些实验

下面是代码

``````#include <iostream>
using namespace std;

#include <string>

template <typename T>
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<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;
};

//typedef zVector<void*> zvVector;

template<typename T>
class zVector<T*> : public zVector<void*>
{
public:
T*& operator [](int index) const {
return (T*&)zVector<void*>::operator [](index);
}

};

//template<typename T>
//class zVector<T*> : public zvVector
//{
//public:
//    T*& operator [](int index) const {
//        return (T*&)zvVector::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;
}``````

``````#include <iostream>
using namespace std;

#include <string>

template <typename T>
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<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;
//};

typedef zVector<void*> zvVector;

//template<typename T>
//class zVector<T*> : public zVector<void*>
//{
//public:
//    T*& operator [](int index) const {
//        return (T*&)zVector<void*>::operator [](index);
//    }

//};

template<typename T>
class zVector<T*> : public zvVector
{
public:
T*& operator [](int index) const {
return (T*&)zvVector::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;
}``````

typedef zVector<void*> zvVector;

cannot call member function 'T*& zVector<T*>::operator[](int) const [with T = void]' without object

### 首席吹牛官

C++中的特化问题和类型萃取问题

qq_38646470
2018/05/13
0
0
c++ 模板之特化

sdoyuxuan
2018/01/25
0
0
C++模板深度解析

2017/07/02
0
0
C++模板之特化与偏特化详解

C++函数模板与类模板实例解析C 语言脚本之家 http://www.jb51.net/article/53746.htm C++关键字typename的深入理解C 语言脚本之家 http://www.jb51.net/article/37565.htm 深入分析:C++模板究...

zray4u
2016/07/18
26
0
【c++】模板知识总结

flowing_wind
2017/11/04
0
0

centos7 linuxdeployqt qt5.13.1 打包程序

shzwork
27分钟前
4
0
IDEA 配置Springboot项目热部署

37分钟前
9
0

39分钟前
5
0

44分钟前
6
0
maven项目对象模型（二）

1.4.4.传递性依赖 一个传递性依赖就是一个依赖的依赖。如果project-a依赖于project-b，而后者接着依赖于project-c，那么project-c就是被认为是project-a的传递性依赖。如果project-c依赖于p...

44分钟前
5
0