博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c++模板与泛型编程
阅读量:4056 次
发布时间:2019-05-25

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

函数模板

template 
inline T const& Max (T const& a, T const& b) {
return a < b ? b:a; }

调用函数时,编译器会进行实参推到,由传入的参数推断类型T,不用手动输入。

类模板

template 
// class T 和 typename T 表示一个意思class Stack {
private: vector
elems; // 元素 public: void push(T const&); // 入栈 void pop(); // 出栈 T top() const; // 返回栈顶元素}; template
void Stack
::push (T const& elem) {
elems.push_back(elem); }

模板特化

上述类模板为泛化(generic)的类模板如果一个类模板对某个特定类型有特殊的处理方法时可以再为该类型写一个特化(specialization)的类模板

全特化模板:

template <>class Stack
{
…};

当传入的类型参数为特化的参数类型时调用特化模板,为其他类型时调用泛化模板。

当类模板有多个类型参数时,对其中某个类型参数为特定类型有特殊处理方法时可以使用偏特化(partial speciaization)的类模板

//泛化:template 
//第二个模板参数带有默认值,意义和函数参数的默认值一样class vector{
…};偏特化: template
class vector
{
…};

泛型编程

Templates 及泛型编程的世界,与面向对象有根本上的不同。在此世界中显式接口和运行期多态仍然存在,但重要性降低。反倒是隐式接口(implicit interfaces)和编译期多态(compile-time polymorphism) 移到前头了。

”运行期多态”和“编译期多态”之间的差异,因为它类似于“哪一个重载函数该被调用”(发生在编译期)和“哪一个virtual 函数该被绑定” (发生在运行期)之间的差异。

相关扩展:

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

你可能感兴趣的文章
excel 查找一个表的数据在另一个表中是否存在
查看>>
AsyncTask、View.post(Runnable)、ViewTreeObserver三种方式总结frame animation自动启动
查看>>
Android中AsyncTask的简单用法
查看>>
概念区别
查看>>
Jenkins 启动命令
查看>>
通过C++反射实现C++与任意脚本(lua、js等)的交互(二)
查看>>
利用清华镜像站解决pip超时问题
查看>>
微信小程序开发全线记录
查看>>
CCF 分蛋糕
查看>>
解决python2.7中UnicodeEncodeError
查看>>
小谈python 输出
查看>>
python:如何将excel文件转化成CSV格式
查看>>
机器学习实战之决策树(一)
查看>>
机器学习实战之决策树二
查看>>
[LeetCode By Python]7 Reverse Integer
查看>>
[LeetCode By Python]121. Best Time to Buy and Sell Stock
查看>>
Android/Linux 内存监视
查看>>
Android2.1消息应用(Messaging)源码学习笔记
查看>>
Variable property attributes or Modifiers in iOS
查看>>
NSNotificationCenter 用法总结
查看>>