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)的更多相关文章

  1. C++ template一些体悟(3)

    其实没啥体悟,因为还没有感受到这些例子的作用,记一下先 #include <iostream> using namespace std; class alloc { }; template ...

  2. C++ template一些体悟(1)

    #include <iostream> using namespace std; template<typename T> class testClass { public: ...

  3. 为.NET Core项目定义Item Template

    作为这个星球上最强大的IDE,Visual Studio不仅仅提供了很多原生的特性,更重要的是它是一个可定制的IDE,比如自定义Project Template和Item Template就是一个非常 ...

  4. jQuery.template.js 简单使用

    之前看了一篇文章<我们为什么要尝试前后端分离>,深有同感,并有了下面的评论: 我最近也和前端同事在讨论这个问题,比如有时候前端写好页面给后端了,然后后端把这些页面拆分成很多的 views, ...

  5. 2000条你应知的WPF小姿势 基础篇<69-73 WPF Freeze机制和Template>

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000ThingsYou Should Know About C# 和 2,00 ...

  6. tornado template

    若果使用Tornado进行web开发可能会用到模板功能,页面继承,嵌套... 多页应用模板的处理多半依赖后端(SPA就可以动态加载局部视图),就算是RESTfull的API设计,也不妨碍同时提供部分模 ...

  7. 设计模式(九): 从醋溜土豆丝和清炒苦瓜中来学习"模板方法模式"(Template Method Pattern)

    今天是五.四青年节,祝大家节日快乐.看着今天这标题就有食欲,夏天到了,醋溜土豆丝和清炒苦瓜适合夏天吃,好吃不上火.这两道菜大部分人都应该吃过,特别是醋溜土豆丝,作为“鲁菜”的代表作之一更是为大众所熟知 ...

  8. C++泛型编程:template模板

    泛型编程就是以独立于任何特定类型的方式编写代码,而模板是C++泛型编程的基础. 所谓template,是针对“一个或多个尚未明确的类型”所编写的函数或类. 使用template时,可以显示的或隐示的将 ...

  9. 新手入门Underscore.js 中文(template)

    Underscore.js是一个很精干的库,压缩后只有4KB.它提供了几十种函数式编程的方法,弥补了标准库的不足,大大方便了javaScript的编程.MVC框架Backbone.js就将这个库作为自 ...

随机推荐

  1. Ajax 调用的WCF

    支持ajax 跨域调用的WCF搭建 1.新建一个"ASP.NET空Web应用程序"项目. 2.新建一个“WCF服务(支持ajax)”. 3.修改WCFAjaxService.svc ...

  2. JavaScript的 sourcemap 的理解

    当我们在使用vue-cli 开发项目完成后, 就要进行部署,执行npm run build 命令,你会发现它生成.js文件的同时,还会生成一个对应的.map 文件. 当时查了一下, .map 文件的主 ...

  3. JAVA web 使用有盟推送总结

    仔细阅读文档,下边的都是废话. 为了省事,iOS和Android 提供了所有了参数,需要那个了修改传参. //ios actionURL为自定义参数 $.ajax({ type : "POS ...

  4. Comet OJ - Contest #0

    A:化成x-√n=y+z-√4yz的形式,则显然n是完全平方数时有无数组解,否则要求n=4yz,暴力枚举n的因数即可.注意判断根号下是否不小于0. #include<iostream> # ...

  5. HDU3507-Print Article-斜率dp入门题

    为了学CDQ分治,从斜率dp和凸包开始做吧.. 代码就是维护一个凸包.利用递增的性质丢掉不合适的点. http://www.cnblogs.com/Rlemon/p/3184899.html 代码学的 ...

  6. Java大数练习

    大数阶乘 题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=28 import java.io.*; import java.util.*; ...

  7. 洛谷P1414又是毕业季二题解

    题目 思想: 首先这个题必定是一个数学题,肯定不是一个一个枚举得到解,这样肯定会T,所以我们就应该想一些别的方法,. 分析: 比如,答案,一定是递减的,因为该答案所满足的条件肯定是越来越苛刻的,所以我 ...

  8. 【XSY2668】排列统计 DP

    题目描述 给你一个长度为\(n\)的排列\(a\),每次要选择两个数,交换这两个数(这两个数可以相同).总共要交换\(k\)次. 最后要统计数列中有多少位置\(i\)满足\(\max_{j\leq i ...

  9. Codeforces Round #541 (Div. 2) D(并查集+拓扑排序) F (并查集)

    D. Gourmet choice 链接:http://codeforces.com/contest/1131/problem/D 思路: =  的情况我们用并查集把他们扔到一个集合,然后根据 > ...

  10. MySQL 练习题 附答案,未完

    综合练习题 表结构 整合一下方便查看 teacher  student  course scors 练习题 1.自行创建测试数据 create table student( sid int prima ...