博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
模板特化疑问
阅读量:6113 次
发布时间:2019-06-21

本文共 2758 字,大约阅读时间需要 9 分钟。

hot3.png

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

    下面是代码

#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;}

能够运行且符合我的期望,不过这个是我写的。书上的例子是这个
#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;}

可是就报错了,

我分析发现好像是
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

转载于:https://my.oschina.net/u/854744/blog/418188

你可能感兴趣的文章
Linux下的CPU性能瓶颈分析案例
查看>>
spring mvc入门
查看>>
2012在数据库技术会议上的讲话PPT打包
查看>>
【Android】 TextView设置个别字体样式
查看>>
python svn
查看>>
raise语句
查看>>
sequence2(高精度dp)
查看>>
ABP实战--集成Ladp/AD认证
查看>>
存储过程
查看>>
phpcms v9栏目列表调用每一篇文章内容方法
查看>>
python 自定义信号处理器
查看>>
luov之SMTP报错详解
查看>>
软件概要设计做什么,怎么做
查看>>
dwr
查看>>
java的特殊符号
查看>>
word2010中去掉红色波浪线的方法
查看>>
fabric上下文管理器(context mangers)
查看>>
JQuery-EasyUI Datagrid数据行鼠标悬停/离开事件(onMouseOver/onMouseOut)
查看>>
并发和并行的区别
查看>>
sed-awk的简单操作
查看>>