C++ template一些体悟(2)
class template的一般化设计之外,特别针对某些参数做特殊设计
#include <iostream> using namespace std;
//一般设计
template<class I, class O>
class testClass {
public:
testClass() {
cout << "I,O" << endl;
}
};
//以下都是特殊设计
template<class T>
class testClass<T, T> {
public:
testClass() {
cout << "T,T" << endl;
}
}; template<class T>
class testClass<T*, T*> {
public:
testClass() {
cout << "T*,T*" << endl;
}
}; template<class T>
class testClass<const T*, T*> {
public:
testClass() {
cout << "const T*,T*" << endl;
}
}; int main(int argc, char **argv) {
testClass<int*, int*> obj1;
return ;
}
一开始没有找到一般设计和特殊设计有啥关联性,进行一下修改
template<class I>
class testClass {
public:
testClass() {
cout << "I,O" << endl;
}
};
编译报错
error: wrong number of template arguments (2, should be 1)
这才意识到,是先定义了一般设计,才会有特殊设计,且特殊设计满足一般设计的格式,不过编译器在匹配时,会匹配最类似的。
比如
上述程序的运行结果是
T*,T*
而非
T,T
如果注释
//template<class T>
//class testClass<T*, T*> {
//public:
// testClass() {
// cout << "T*,T*" << endl;
// }
//};
运行结果才会是
T,T
照此思路设计一个typename T的类试试
#include <iostream> using namespace std; //一般设计
template<class I>
class testClass {
public:
testClass() {
cout << "I" << endl;
}
};
//特殊化设计
template<class I>
class testClass<I*> {
public:
testClass() {
cout << "I*" << endl;
}
}; int main(int argc, char **argv) {
testClass<int*> obj1;
return ;
}
果然,和我想得差不多,好多文章就把STL源码分析的这段代码抄一下了事,半点分析没有,我也是自己修修改改试出规律的,没看正规文档的解释。
C++ template一些体悟(2)的更多相关文章
- C++ template一些体悟(3)
其实没啥体悟,因为还没有感受到这些例子的作用,记一下先 #include <iostream> using namespace std; class alloc { }; template ...
- C++ template一些体悟(1)
#include <iostream> using namespace std; template<typename T> class testClass { public: ...
- 为.NET Core项目定义Item Template
作为这个星球上最强大的IDE,Visual Studio不仅仅提供了很多原生的特性,更重要的是它是一个可定制的IDE,比如自定义Project Template和Item Template就是一个非常 ...
- jQuery.template.js 简单使用
之前看了一篇文章<我们为什么要尝试前后端分离>,深有同感,并有了下面的评论: 我最近也和前端同事在讨论这个问题,比如有时候前端写好页面给后端了,然后后端把这些页面拆分成很多的 views, ...
- 2000条你应知的WPF小姿势 基础篇<69-73 WPF Freeze机制和Template>
在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000ThingsYou Should Know About C# 和 2,00 ...
- tornado template
若果使用Tornado进行web开发可能会用到模板功能,页面继承,嵌套... 多页应用模板的处理多半依赖后端(SPA就可以动态加载局部视图),就算是RESTfull的API设计,也不妨碍同时提供部分模 ...
- 设计模式(九): 从醋溜土豆丝和清炒苦瓜中来学习"模板方法模式"(Template Method Pattern)
今天是五.四青年节,祝大家节日快乐.看着今天这标题就有食欲,夏天到了,醋溜土豆丝和清炒苦瓜适合夏天吃,好吃不上火.这两道菜大部分人都应该吃过,特别是醋溜土豆丝,作为“鲁菜”的代表作之一更是为大众所熟知 ...
- C++泛型编程:template模板
泛型编程就是以独立于任何特定类型的方式编写代码,而模板是C++泛型编程的基础. 所谓template,是针对“一个或多个尚未明确的类型”所编写的函数或类. 使用template时,可以显示的或隐示的将 ...
- 新手入门Underscore.js 中文(template)
Underscore.js是一个很精干的库,压缩后只有4KB.它提供了几十种函数式编程的方法,弥补了标准库的不足,大大方便了javaScript的编程.MVC框架Backbone.js就将这个库作为自 ...
随机推荐
- Python:matplotlib绘制条形图
条形图,也称柱状图,看起来像直方图,但完是两码事.条形图根据不同的x值,为每个x指定一个高度y,画一个一定宽度的条形:而直方图是对数据集进行区间划分,为每个区间画条形. 将上面的代码稍微修改一 ...
- delphi中 dataset容易出错的地方
最近写delphi项目,用到的数据集中的dataset,一直修改exception啊,写下过程. 在对数据集进行任何操作之前,首先要打开数据集.要打开数据集,可以把Active属性设为True,例如: ...
- 第213天:12个HTML和CSS必须知道的重点难点问题
12个HTML和CSS必须知道的重点难点问题 这12个问题,基本上就是HTML和CSS基础中的重点个难点了,也是必须要弄清楚的基本问题,其中定位的绝对定位和相对定位到底相对什么定位?这个还是容易被忽视 ...
- const函数
1. const修饰成员函数:表示不可以修改成员变量 class test{ public: test(){ i_ = ; } int Get() const{ //i_ = 0; //error:不 ...
- bzoj-1191(二分图最大匹配)
解题思路:比较裸的一道题,直接跑匈牙利就行了,但是要注意一点,这个兔崽子是在闯关,一道题回答不出来就没了,直接在题目循环那里加一个else break;就行了!!!; #include<iost ...
- 了解AutoCAD对象层次结构 —— 4 —— 符号表
上一小节我们看到了符号表包含了一系列的表(共9个),这些表数量是固定的,用户不能增加新的表,也不能删除现有的表. 符号表名称 符号表功能 Block Table 块表 存储图形数据库中定义的块.此表中 ...
- 了解AutoCAD对象层次结构 —— 3 ——数据库
数据库的结构是什么样的?对象是如何存储在数据库中的?这些问题我们需要搞明白.在此我们可以借助工具ArxDbg或MgdDbg来查看数据库结构及其内容.下图就是利用MgdDbg工具查看到的内容,我们可以看 ...
- PHP——生成唯一序列号UUID
<?php function uuid($uid = '') { $chars = md5(uniqid(mt_rand(), true)); $uuid = substr($chars, 0, ...
- 洛谷P2084 进制转换
题目背景 无 题目描述 今天小明学会了进制转换,比如(10101)2 ,那么它的十进制表示的式子就是 : 1*2^4+0*2^3+1*2^2+0*2^1+1*2^0, 那么请你编程实现,将一个M进制的 ...
- 初步了解HTML
超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言. 您可以使用 HTML 来建立自己的 WEB 站点,HTML 运行在浏览器上 ...