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

本文共 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/418382

你可能感兴趣的文章
区块链技术开发能做哪些数字资产交易所系统应用服务?
查看>>
Mac上最简单明了的利用Docker搭建Redis集群
查看>>
java B2B2C源码电子商城系统-Spring Cloud常见问题与总结(二)
查看>>
Kotlin 绑定Android控件
查看>>
docker命令存档
查看>>
Nginx accept锁的机制和实现
查看>>
Spark学习——性能调优(一)
查看>>
Element Transfer
查看>>
Functions
查看>>
前端知识点总结——VUE
查看>>
记录NSArray 快速求和、平均值、最大值、最小值
查看>>
深入剖析Java即时编译器(下)
查看>>
基于Mixin Network的Ruby比特币开发教程
查看>>
干货:如何处理前任程序员遗留下来的代码?
查看>>
LeetCode 680 Valid Palindrome II javascript解决方案
查看>>
Golang 学习笔记(04)—— array, slice, map
查看>>
带你了解TCP/IP协议族
查看>>
Typora编辑器Markdown语法简介
查看>>
JSP+SSH汽车租赁
查看>>
promise笔记之thenable 对象
查看>>