前段时间重新学习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++模板实例掌握的更多相关文章

  1. GIS案例学习笔记-CAD数据分层导入现有模板实例教程

    GIS案例学习笔记-CAD数据分层导入现有模板实例教程 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 1. 原始数据: CAD数据 目标模板 2. 任务:分5个图层 ...

  2. [Reprint] C++函数模板与类模板实例解析

    这篇文章主要介绍了C++函数模板与类模板,需要的朋友可以参考下   本文针对C++函数模板与类模板进行了较为详尽的实例解析,有助于帮助读者加深对C++函数模板与类模板的理解.具体内容如下: 泛型编程( ...

  3. AngularJS 路由和模板实例及路由地址简化方法

    最近一同事在学习AngularJS,在路由与模板的学习过程中遇到了一些问题,于是今天给她写了个例子,顺便分享出来给那些正在学习AngularJS的小伙伴们. 话说这AngularJs 开发项目非常的爽 ...

  4. openNebula 模板实例化成虚拟机【参数名为VM_NAME】

    { "action": { "perform": "instantiate", "params": { "vm ...

  5. unitest discover 模板实例

    说明:测试用例和主函数分开存放

  6. Vue单文件模板实例

    AddItemComponent.vue <template> <div id="add-item-template"> <div class=&qu ...

  7. 前端MVC学习总结(一)——MVC概要与angular概要、模板与数据绑定

    一.前端MVC概要 1.1.库与框架的区别 框架是一个软件的半成品,在全局范围内给了大的约束.库是工具,在单点上给我们提供功能.框架是依赖库的.AngularJS是框架而jQuery则是库. 1.2. ...

  8. 从零开始编写自己的C#框架(12)——T4模板在逻辑层中的应用(一)(附源码)

    对于T4模板很多朋友都不太熟悉,它在项目开发中,会帮我们减轻很大的工作量,提升我们的开发效率,减少出错概率.所以学好T4模板的应用,对于开发人员来说是非常重要的. 园子里对于T4模板的介绍与资料已经太 ...

  9. 模板函数(template function)出现编译链接错误(link error)之解析

    总的结论:    将template function 或者 template class的完整定义直接放在.h文件中,然后加到要使用这些template function的.cpp文件中. 1. 现 ...

随机推荐

  1. mysql 复杂的查询语句,工作中用到的记录下

    1  去重查询 select distinct id from user_info where xxxxxx 2 group by 分组查询中排序 group by本身没有排序功能,这可能是mysql ...

  2. JavaWeb笔记——注册登录系统项目思路

    功能:   > 注册   > 登录 --------------------------------- JSP:   * login.jsp  --> 登录表单   * regist ...

  3. IME 编程相关

    以下内容摘自http://msdn.microsoft.com/zh-cn/goglobal/bb688135.aspx 在 Win32 中处理输入语言的方法 Microsoft Developer ...

  4. HTML Meta标签详解

    HTML Meta中添加X-UA-Compatible和IE=Edge,chrome=1有什么作用?主题 HTML X-UA-Compatible是自从IE8新加的一个设置,对于IE8以下的浏览器是不 ...

  5. code manager tools git的使用;

    git的使用 一.下载及安装: 1.下载:https://github.com 2.安装: 二.常用命令: 查看.添加.提交.删除.找回,重置修改文件 git help< command> ...

  6. asp.net MVC3 “System.Web.Mvc.ModelClientValidationRule”问题

    错误提示: Error 1 The type 'System.Web.Mvc.ModelClientValidationRule' exists in both 'c:\Program Files ( ...

  7. linux内核编程笔记【原创】

    以下为本人学习笔记,如有转载请注明出处,谢谢 DEFINE_MUTEX(buzzer_mutex); mutex_lock(&buzzer_mutex); mutex_unlock(& ...

  8. Java动手实验及课后程序

    课后作业 一.编写程序,消息框显示计算结果 设计思想:导入Scanner包,使用JOptionPane类来实现消息框的输入和结果的显示. 程序代码: package com; import java. ...

  9. sysfs实例

    转自:http://blog.chinaunix.net/u1/51562/showart_1076295.html 一:前言 在设备模型中,sysfs文件系统用来表示设备的结构.将设备的层次结构形象 ...

  10. poj-3616 Milking Time (区间dp)

    http://poj.org/problem?id=3616 bessie是一头工作很努力的奶牛,她很关心自己的产奶量,所以在她安排接下来的n个小时以尽可能提高自己的产奶量. 现在有m个产奶时间,每个 ...