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. ps -aux返回超时的可能原因

    在我的环境上出现了 ps -aux返回超时的问题. 执行到 ……root 19342 0.0 0.0 0 0 ? S< Mar12 0:00 [kworker/34:1H] 这里,然后就卡住了. ...

  2. 开发中遇到的css兼容问题

    1. overflow: scroll(平台兼容) 在Mac中的Chrome浏览器中,内容不超过容器时不会出现滚动条: 在Wins中的Chorme浏览器中,内容不超过容器时也会出现滚动条. 解决方法: ...

  3. Ubuntu install flash

    Software&Updates - Other Software - Canonical Parners sudo apt install adobe-flashplugin

  4. 【python练习题】程序7

    #题目:将一个列表的数据复制到另一个列表中. l = [1,2,3,4,5,6,7,8] m = [] m = l[:] print (m)

  5. IntelliJ IDEA 取消【import .;】星号导包

    Setting -- Editor -- Code Style -- Java -- Imports 在 在 具体数值自行填写,够大即可,截图如下:

  6. Educational Codeforces Round 62 (Rated for Div. 2)

    A. Detective Book 题意:一个人读书  给出每一章埋的坑在第几页可以填完 . 一个人一天如果不填完坑他就会一直看 问几天能把这本书看完 思路:模拟一下 取一下过程中最大的坑的页数  如 ...

  7. 洛谷P1897电梯里的爱情题解

    题目 这个题是一个搜索题,可以先算出最高楼层,并算出不重复的楼层的个数,要注意的一点就是一定不要把0楼算在内. 代码 #include<iostream> #include<cstr ...

  8. 学习Android过程中遇到的问题及解决方法——网络请求

    在学习Android的网络连接时遇到崩溃或异常(出现的问题就这两个,但是不稳定)的问题,先上代码,看看哪里错了(答案在文末) activity_main.xml: <?xml version=& ...

  9. Spring01-Ioc基本使用

    一. Spring简介 1. Spring介绍 Spring框架主页: Spring官网 Spring资源地址:下载地址 Spring框架,由Rod Johnson开发 Spring是一个非常活跃的开 ...

  10. 【HDU 6036】Division Game (NTT+数学)

    多校1 1004 HDU-6036 Division Game 题意 有k堆石头(0~k-1),每堆n个.\(n=\prod_{i=0}^{m}p_i^{e_i}\).\(0\le m,k \le 1 ...