类模板深度剖析

多参数类模板
类模板可以定义任意多个不同的类型参数
template <typename T1, typename T2>
class Test
{
public:
  void add(T1 a, T2 b);
};

使用上述的类模板:

Test<int ,float> t;

类模板可以被特化:即特殊化
-指定类模板的特定实现
-部分类型参数必须显示指定
-根据类型参数分开实现类模板
template
<typename T1, typename T2>
class Test
{

};

上面的类模板可以被特化为:
template
<typename T>
class Test <T,T>
{

};

类模板的特化类型
-部分特化:适用于特定规则约束类型参数
-完全特化:完全显示指定类型参数
template
<typename T1, typename T2>
class Test
{

};

完全特化为:
template
< >
class Test <int ,int>
{

};

#include <iostream>
#include <string>

using namespace std;

template
<typename T1, typename T2>
class Test
{
public:
    void add(T1 a, T2 b)
    {
        cout << "void add (T1 a, T2 b) " << endl;
        cout << a + b << endl;
    }

};

//部分特化
template
<typename T>
class Test <T ,T>  //当Test类模板的两个类型参数完全相同时,使用这个实现
{
public:
    void add(T a, T b)
    {
        cout << "void add (T a, T b) " << endl;
        cout << a + b << endl;
    }
    void print()
    {

        cout << "Test<T ,T> " << endl;
    }

};

template
<typename T1, typename T2>
class Test <T1*,T2*>
{
public:
    void add(T1* a, T2* b)
    {
        cout << " void add(T1* a, T2* b) " << endl;
        cout << *a + *b << endl;
    }

};

//完全特化
template
< >
class Test <void*, void*>
{
public:
    void add(void* a, void* b)
    {
        cout << "void add(void* a, void* b) " << endl;
        cout << "error to add void* parameters" << endl;
    }

};
int main()
{

      Test<int,float> t1;
      Test<long,long> t2;
      Test<void*, void*>t3;
      t1.add(1,1.5);

      t2.add(5,5);
      t2.print();

      t3.add(NULL,NULL);

      Test<int*,double*>t4;
      int a = 2;
      double b = 3;
      t4.add(&a,&b); //它调用的

    return 0;
}

类模板特化注意事项:
-特化只是模板的分开实现
  本质上是同一个类模板
-特化类模板的使用方式是统一的
  必须显示指定每一个类型参数

原文地址:https://www.cnblogs.com/-glb/p/11992783.html

时间: 2024-10-08 13:33:23

类模板深度剖析的相关文章

c++类模板深度剖析

1.类模板的泛指类型可以定义多个 template <typename T1, typename T2> class Test { public: void add(T1 a, T2, b); }; 使用时: Test<int, float> t1; //T1的泛指类型就是int, T2的泛指类型就是float. 2.类模板的特化类型 (1)意思就是如果定义了一个类模板,这个类模板的参数有多个,但是如果当使用这个类模板的时候,我们传递参数时,参数的类型是一样的话,编译器就会将类模板

第59课 类模板深度剖析

多参数类模板: 特化: 上图特化的意义是将原来接收任意两个类型参数的模板特化为只能接收一种类型的两个参数. 这意味着如果定义类时我们给的两个参数是同种类型的,则编译器优先使用右边的这种模板实现. 一个类模板实际分开实现为两个部分,编译器根据具体的参数选择其中的一个模板. 编译器会认为上图中的两个Test模板是同一个,具体实现时,如参数类型不同则选择左边的实现,参数类型相同时选择右边的实现. 完全特化就是我们根本就不需要泛指参数了,直接指定原先的泛指类型全部为int,完全特化意味着特化之后的模板里

Java记录 -25- String类深度剖析

Java中String类深度剖析 1.Java源码中String类的定义: public final class String extends Object implements Serializable, Comparable<String>, CharSequence 2.String 类代表字符串.Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现. 3.字符串是常量:它们的值在创建之后不能更改.字符串缓冲区支持可变的字符串.因为 String

Objective-C类成员变量深度剖析

目录 Non Fragile ivars 为什么Non Fragile ivars很关键 如何寻址类成员变量 真正的“如何寻址类成员变量” Non Fragile ivars布局调整 为什么Objective-C类不能动态添加成员变量 总结 看下面的代码,考虑Objective-C里最常见的操作之一——类成员变量访问. - (void)doSomething:(SomeClass *)obj { obj->ivar1 = 42; // 访问obj对象的public成员变量 int n = sel

面向对象的三大特性 鸭子类型 类的约束 super的深度剖析

1.三大特性 封装 ? 把很多数据封装到?个对象中. 把固定功能的代码封装到?个代码块, 函数, 对象, 打包成模块. 这都属于封装的思想. 具体的情况具体分析. 比如. 你写了?个很?B的函数. 那这个也可以被称为封装. 在?向对象思想中. 是把?些看似?关紧要的内容组合到?起统?进?存储和使?. 这就是封装. 继承 ? ?类可以?动拥有?类中除了私有属性外的其他所有内容. 说?了, ??可以随便?爹的东?. 但是朋友们, ?定要认清楚?个事情. 必须先有爹, 后有??. 顺序不能乱, 在py

84课:StreamingContext、DStream、Receiver深度剖析

StreamingContext.DStream.Receiver深度剖析 本课分成四部分讲解,第一部分对StreamingContext功能及源码剖析:第二部分对DStream功能及源码剖析:第三部分对Receiver功能及源码剖析:最后一部分将StreamingContext.DStream.Receiver结合起来分析其流程. 一.StreamingContext功能及源码剖析: 1.  通过Spark Streaming对象jssc,创建应用程序主入口,并连上Driver上的接收数据服务

横瓜先生深度剖析QQ空间前端后端技术AJAX与FORM等等

[皇帝]北京-横瓜-7年(601069289)  22:06:34 [元帅]横瓜-PHP教父(601069289)  21:35:29 这里是QQ空间的图片上传方法 是FLASH 我草 [元帅]横瓜-PHP教父(601069289)  21:36:31 竟然不是JS QQ空间用FLASH 图片上传方法 [元帅]横瓜-PHP教父(601069289)  21:37:35 至此,整个QQ空间的技术,已经全部被我破解 @IT柏拉图 [元帅]IT柏拉图(2500875)  21:38:11 你真是天才,

【源码】StringBuilder和StringBuffer源码深度剖析

//------------------------------------------------------------------------ 写篇博客不容易,请尊重作者劳动成果.转载请注明出处:http://blog.csdn.net/chdjj //------------------------------------------------------------------------ 我觉得要通过源码研究一个类,应该先从整体上了解这个类,比如说这个类的继承体系,有哪些超类,继承

深度剖析WordPress主题结构(转)

利用强大的技术,可以把基于wordpress的网站做成各种各样的形式,这除了要求wordpress主题开发人员精通html,PHP,JS,CSS等技术,还需要开发者掌握WordPress主题的框架. Gevin今天结合The anatomy of a WordPress theme这篇文章,和大家一起剖析WordPress主题的结构.原文作者用图文形式,分别从网站外观.页面组成和后台文件三个方面,形象的向大家展示了WordPress的架构,下面Gevin和大家一起分析WordPress是如何架构