## 模板特化疑问 原

首席吹牛官

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

下面是代码

``````#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

import android.content.Intent;import android.graphics.Bitmap;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import andr......

MrLins

5
0

8
0

Shingfi

4
0

DustinChan

6
0
Excel插入批注：可在批注插入文字、形状、图片

1.批注一直显示：审阅选项卡-------->勾选显示批注选项： 2.插入批注快捷键：Shift+F2 组合键 3.在批注中插入图片：鼠标右键点击批注框的小圆点【重点不可以在批注文本框内点击】----->调出批...

6
1