C++模板实例掌握
前段时间重新学习C++,主要看C++编程思想和C++设计新思维。对模版的使用有了更进一层的了解,特总结如下:
下面列出了模版的常用情况:
<< '\n';
}


//参考:http://www.cnblogs.com/dayouluo/archive/2005/05/14/155092.html
特别注意:类,全局函数,类的成员函数都可以特化,但是只有类可以半特化,全局函数和类的成员函数不可以半特化。
//-------------------------------------------
//1 类的特化和类成员函数的特化
template<typename T>
class Widget1
{
public:
void Fun1()
{
//generic implementation
}
};
template<>
class Widget1<int>
{
public:
void Fun1()
{
}
};
template<>
void Widget1<char>::Fun1()
{
//specialization
}
void main()
{ 
Widget1<char> w;
w.Fun1();
Widget1<int> w2;
w2.Fun1();
}
//-------------------------------------------
//2 全局函数的特化和重载
template<typename T1, typename T2>
T1 Fun2(T2)
{
}
//下面2个应该是属于重载
template<typename T2>
char Fun2(T2)
{
char c;
return c;
}
template<typename T1>
T1 Fun2(char)
{
}
//全局函数的特化
template<>
char Fun2<char,int>(int)
{
char c;
return c;
}
int main()
{
}
//-------------------------------------------
//3 全局函数不能半特化,以下编译失败
template <typename T1,typename T2> //原型1
void Test(T1,T2)
{
}
template <typename T1>
void Test<T1,T1>(T1,T1)
{
}
template<typename T1, typename T2> //原型2
T1 Fun2(T2)
{
}
//
template<typename T2>
int Fun2<int,T2>(T2)
{
}
template<typename T1>
T1 Fun2<T1,int>(int)
{
}
template<typename T>
T Fun2<T,T>(T)
{
}
int main()
{
}

////-------------------------------------------
////4 类可以特化和半特化,但是特的成员函数像全局函数一样,只能特化,不能半特化,
template<typename T1, typename T2> struct Widget2
{
void Fun2()
{
//generic implementation
}
};
template<typename T2>
struct Widget2<char,T2>
{
void Fun2()
{
}
};
template<typename T2>
struct widget2
{
void Fun2()
{
// class partial specialization
}
};


//the class member funtion can not be partial specialization
//以下的成员函数半特化,编译失败
template<typename T2>
void Widget2<char, T2>::Fun2()
{
//class member function partial specialization
}
int main()
{
}参考:C++编程思想2
http://www.cnblogs.com/feisky/archive/2009/11/04/1596203.html
C++模板实例掌握的更多相关文章
- GIS案例学习笔记-CAD数据分层导入现有模板实例教程
GIS案例学习笔记-CAD数据分层导入现有模板实例教程 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 1. 原始数据: CAD数据 目标模板 2. 任务:分5个图层 ...
- [Reprint] C++函数模板与类模板实例解析
这篇文章主要介绍了C++函数模板与类模板,需要的朋友可以参考下 本文针对C++函数模板与类模板进行了较为详尽的实例解析,有助于帮助读者加深对C++函数模板与类模板的理解.具体内容如下: 泛型编程( ...
- AngularJS 路由和模板实例及路由地址简化方法
最近一同事在学习AngularJS,在路由与模板的学习过程中遇到了一些问题,于是今天给她写了个例子,顺便分享出来给那些正在学习AngularJS的小伙伴们. 话说这AngularJs 开发项目非常的爽 ...
- openNebula 模板实例化成虚拟机【参数名为VM_NAME】
{ "action": { "perform": "instantiate", "params": { "vm ...
- unitest discover 模板实例
说明:测试用例和主函数分开存放
- Vue单文件模板实例
AddItemComponent.vue <template> <div id="add-item-template"> <div class=&qu ...
- 前端MVC学习总结(一)——MVC概要与angular概要、模板与数据绑定
一.前端MVC概要 1.1.库与框架的区别 框架是一个软件的半成品,在全局范围内给了大的约束.库是工具,在单点上给我们提供功能.框架是依赖库的.AngularJS是框架而jQuery则是库. 1.2. ...
- 从零开始编写自己的C#框架(12)——T4模板在逻辑层中的应用(一)(附源码)
对于T4模板很多朋友都不太熟悉,它在项目开发中,会帮我们减轻很大的工作量,提升我们的开发效率,减少出错概率.所以学好T4模板的应用,对于开发人员来说是非常重要的. 园子里对于T4模板的介绍与资料已经太 ...
- 模板函数(template function)出现编译链接错误(link error)之解析
总的结论: 将template function 或者 template class的完整定义直接放在.h文件中,然后加到要使用这些template function的.cpp文件中. 1. 现 ...
随机推荐
- git入门-分支
1. git分支简介 使用分支可以让你从开发主线上分离开来,然后在新的分支上解决特定问题,同时不会影响主线.像其它的一些版本控制系统,创建分支需要创建整个源代码目录的副本.而Git 的分支是很轻量级的 ...
- mysql主从配置(转载)
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://369369.blog.51cto.com/319630/790921 还可以参考 ...
- QT程序探测所需DLL,静态连接和打包
1. 如果没有使用静态编译的QT库的话,那么无论VS还是MinGW编译出来的exe程序都要带上一堆DLL,而且必须是准确版本的DLL,对于VS好像还有一个Microsoft.VC90.CRT.mani ...
- mysql view
定义:在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表. 1.视图是一个虚拟存在的表,视图可以包含表的全部或者部分记录,也可以由一个表或者多个表来创建.使用视图就可以不用看到数据表中的所有 ...
- flex Bindable
[Bindable]大概又是Flex用得最多的元数据了.刚开始用用确实好简单,效率真是没的说.不过这几天用着却碰到了些问题,我自己搜集了些资料,想着有必要在blog里总结一下吧. 啥是元数据(meta ...
- mysql 授权 打开全部
GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "."FLUSH PRIVILEGES;
- CMD下查看某个端口被谁占用了
cmd运行 netstat -aon|findstr "8080" 运行结果如下 TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 6416 TCP [:: ...
- YTU 2619: B 友元类-计算两点间距离
2619: B 友元类-计算两点间距离 时间限制: 1 Sec 内存限制: 128 MB 提交: 469 解决: 252 题目描述 类Distance定义为类Point的友元类来实现计算两点之间距 ...
- 《c程序设计语言》读书笔记--字符串复制
#include <stdio.h> #define MAXLINE 10 int getLine(char s[], int lim); void copy(char to[], cha ...
- asp存储过程
dim s_ip,MyComm s_ip=request.ServerVariables("REMOTE_ADDR") Set MyComm = Server.CreateObje ...