模板特殊化(Template specialization)
来源:互联网 发布:尚观linux视频 百度云 编辑:程序博客网 时间:2024/06/05 17:02
在chromium中实现了urple,用到了模板特殊化。base/turple.h
来自: http://hi.baidu.com/yzmforever123/item/5ce760521239219408be17a4
模板的特殊化是当模板中的pattern有确定的类型时,模板有一个具体的实现。例如假设我们的类模板pair 包含一个取模计算(module operation)的函数,而我们希望这个函数只有当对象中存储的数据为整型(int)的时候才能工作,其他时候,我们需要这个函数总是返回0。这可以通过下面的代码来实现:
// Template specialization
#include <iostream.h>
template <class T> class pair {
T value1, value2;
public:
pair (T first, T second){
value1=first;
value2=second;
}
T module () {return 0;}
};
template <>
class pair <int> {
int value1, value2;
public:
pair (int first, int second){
value1=first;
value2=second;
}
int module ();
};
template <>
int pair<int>::module() {
return value1%value2;
}
int main () {
pair <int> myints (100,75);
pair <float> myfloats (100.0,75.0);
cout << myints.module() << '\n';
cout << myfloats.module() << '\n';
return 0;
}
250
template <> class class_name <type>
这个特殊化本身也是模板定义的一部分,因此,我们必须在该定义开头写template <>。而且因为它确实为一个具体类型的特殊定义,通用数据类型在这里不能够使用,所以第一对尖括号<> 内必须为空。在类名称后面,我们必须将这个特殊化中使用的具体数据类型写在尖括号<>中。
当我们特殊化模板的一个数据类型的时候,同时还必须重新定义类的所有成员的特殊化实现(如果你仔细看上面的例子,会发现我们不得不在特殊化的定义中包含它自己的构造函数 constructor,虽然它与通用模板中的构造函数是一样的)。这样做的原因就是特殊化不会继承通用模板的任何一个成员。
在chromium的自定义消息的消息参数中用到了template specializing
参考:
http://www.cnblogs.com/alephsoul-alephsoul/archive/2012/10/18/2728753.html
- 模板特殊化(Template specialization)
- 模板特殊化(Template specialization)http://blog.csdn.net/fingding/article/details/32079289
- 模板特化(template specialization)
- C++ Template Specialization (模板特化)
- Template Specialization
- template specialization
- 模板特化和偏模板特化例子(template specialization and partial template specialization)
- 【C++模板】特化与偏特化 template [partial] specialization
- C++ - 函数模板定制(function template specialization) 详解 及 代码
- C++ 函数模板的特化(Function Template Specialization)
- C++笔记(8) template partitial specialization模板偏特化
- Template Specialization and Partial Template Specialization
- 模板与特殊化
- template specialization on template class
- Pure C++: 泛型编程,模板特殊化
- STL源码剖析:class template partial specialization
- 认清C++语言之《模板特化specialization》
- STL之准备、总结、模板实例化和特殊化
- vi/vim复制粘贴命令
- linux环境下 java调用c++的shared library(环境安装以及代码书写流程)
- 十大基础实用算法之归并排序和二分查找
- Bigip负载均衡器的问题汇总(1)
- 基于DM642的mpeg-2视频压缩编码之硬件结构
- 模板特殊化(Template specialization)
- HDU 1253 胜利大逃亡 NYOJ 523【BFS】
- 机器大端,小端的判别及int ,long, long long 尺寸大小的判别
- 两个Fragment之间的跳转
- 第九节swift 三元操作符 主标签
- Android开发详解之onTouch和onClick详解
- iOS:Swift界面实例1, 简单界面
- 成员变量和局部变量的区别
- g++编译命令选项