博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ Template类模板的特化(3.3节, 3.4节)
阅读量:2193 次
发布时间:2019-05-02

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

用模板实参来特化类模板,和函数模板的重载类似,通过特化类模块,可以优化基于某种特定类型的实现,或者克服某种特定类型在实例化类模板时所出现的不足。另外,如果要特一个类模板,你还要特化该类模板的所有成员函数。虽然也可以只特化某个成员,但这个做法并没有特化整个类,也就没有特化整个类模板。

为了特化一个类模板,你必须在起始处声明一个template<>,接下来声明用来特化类模板的类型。这个类型被用作模板实参,且必须在类名的后面直接指定:

template <>

class Stack<std::string>{

....

};

进行类模板的特化时,每个成员函数都必须重新定义为普通函数,原来模板函数中的每个T也相应地被进行特化的类型取代:

下面来看下类模板特化的使用示例

//stack2.h#ifndef STACK2_H#define STACK2_H#include 
#include
#include
#include "stack1.h"template<>class Stack
{private: std::deque
elems; //元素public: void push(std::string const &elem); //在尾部添加元素 void pop(); //在尾部删除一个元素 std::string top() const; //栈顶元素 bool empty() const { return elems.empty(); }};void Stack
::push(std::string const &elem){ elems.push_back(elem); //添加一个元素}void Stack
::pop(){ if(elems.empty()) { throw std::out_of_range("Stack
::pop(): empty stack"); } elems.pop_back(); //删除一个元素}std::string Stack
::top() const{ if(elems.empty()) { throw std::out_of_range("Stack
::top():empty stack"); } return elems.back();}#endif // STACK2_H
//stack2test.cpp#include 
#include
#include
#include "stack2.h"int main(){ try { Stack
intStack; Stack
stringStack; intStack.push(7); std::cout << intStack.top() << std::endl; intStack.pop(); stringStack.push("hello"); std::cout << stringStack.top() << std::endl; stringStack.pop(); stringStack.pop(); } catch (std::exception const &ex) { std::cerr << "Exception: " << ex.what() << std::endl; return EXIT_FAILURE; } return 0;}

运行结果

转载地址:http://nkiub.baihongyu.com/

你可能感兴趣的文章
【LEETCODE】299-Bulls and Cows
查看>>
【LEETCODE】223-Rectangle Area
查看>>
【LEETCODE】12-Integer to Roman
查看>>
【学习方法】如何分析源代码
查看>>
【LEETCODE】61- Rotate List [Python]
查看>>
【LEETCODE】82- Remove Duplicates from Sorted List II [Python]
查看>>
【LEETCODE】86- Partition List [Python]
查看>>
【LEETCODE】147- Insertion Sort List [Python]
查看>>
【算法】- 动态规划的编织艺术
查看>>
用 TensorFlow 让你的机器人唱首原创给你听
查看>>
对比学习用 Keras 搭建 CNN RNN 等常用神经网络
查看>>
深度学习的主要应用举例
查看>>
word2vec 模型思想和代码实现
查看>>
怎样做情感分析
查看>>
用深度神经网络处理NER命名实体识别问题
查看>>
用 RNN 训练语言模型生成文本
查看>>
RNN与机器翻译
查看>>
用 Recursive Neural Networks 得到分析树
查看>>
RNN的高级应用
查看>>
TensorFlow-7-TensorBoard Embedding可视化
查看>>