类模板使用示例(三) 类模板局部特化

MyClass.h文件代码:

#ifndef MYCLASS_H
#define MYCLASS_H

#include<iostream>

template <typename T1, typename T2>
class MyClass
{
public:
    void print()
    {
        std::cout << "T1 VS. T2" << std::endl;
    }
};

template <typename T>
class MyClass<T, T>
{
public:
    void print()
    {
        std::cout << "T VS. T" << std::endl;
    }
};

template <typename T>
class MyClass<T, int>
{
    public:
    void print()
    {
        std::cout << "T VS. int" << std::endl;
    }
};

template <typename T1, typename T2>
class MyClass<T1*, T2*>
{
    public:
    void print()
    {
        std::cout << "T1* VS. T2*" << std::endl;
    }
};

template <typename T>
class MyClass<T*, T*>
{
    public:
    void print()
    {
        std::cout << "T* VS. T*" << std::endl;
    }
};

#endif // MYCLASS_HPP_INCLUDED

测试用代码main.cpp:

#include <iostream>
#include <string>
#include <cstdlib>
#include "MyClass.h"

using namespace std;

int main()
{
    MyClass<int, float> mcif;
    mcif.print();

    MyClass<float,float> mcff;
    mcff.print();

    MyClass<float, int> mcfi;
    mcfi.print();

    MyClass<int*, float*> mcipfp;
    mcipfp.print();

    MyClass<int*, int*> mcipip;
    mcipip.print();

    //MyClass<int, int> mcii;// Will cause ambiguous class template instantiation

    return 0;
}

结果:

时间: 2024-08-25 09:56:50

类模板使用示例(三) 类模板局部特化的相关文章

Java 嵌套类和内部类示例&lt;三&gt;

<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size:18px;">package nested_inner_class;</span></span> <span style="font-size:18px;"> public class StaticNestedTest3 { pu

C++模板编程 - 第三章 类模板

模板类 template<typename T> stack {...} 的构造函数应该写作stack而不是stack<T>,经作者这么一说我在注意到这件事情. 模板的特化 先说说函数模板.函数模板只能全特化,不能偏特化,并且特化的模板函数相比于等价模板函数优先,但是和非模板函数相比非模板函数优先. 1 #include<iostream> 2 3 using std::cout; 4 using std::endl; 5 6 // version 1 7 int ma

【C++】模板简述(三):类模板

上文简述了C++模板中的函数模板的格式.实例.形参.重载.特化及参数推演,本文主要介绍类模板. 一.类模板格式 类模板也是C++中模板的一种,其格式如下: template<class 形参名1, class 形参名2, ...class 形参名n> class 类名{ ... }; 例如:我个人模拟实现的Vector的声明 template<typename T> class Vector{ public: typedef T* Iterator; //迭代器 typedef c

我的QT5学习之路(三)——模板库、工具类和控件(中)

一.前言 前面我们了解了关于Qt字符串的一些简单操作,容器类的分类和各自的主要特点以及用途,这一次我们了解一些常见的工具类和常见的控件. 二.QByteArry和QVariant 2.1 QByteArry 关于QByteArry,我们在上篇中曾经看到过.QByteArry和QString的功能和API基本类似,具有很多相似的函数.不同的地方在于QByteArry能够存储原生的二进制数据和8位编码的文本数据,那么何为原生的二进制数据和8为编码的文本数据呢?稍微了解计算机原理的童鞋可能都知道,计算

C++—模板(2)类模板与其特化

我们以顺序表为例来说明,普通顺序表的定义如下: 1 typedef int DataType; 2 //typedef char DataType; 3 class SeqList 4 { 5 private : 6 DataType* _data ; 7 int _size ; 8 int _capacity ; 9 } ; 模板类也是模板, 必须以 关键字templ ate开头, 后接模板形参表. 模板类一般格式如下:template<class 形参名 1, class 形参名 2, .

大气智能家居家具装修装饰类企业通用网站织梦模板【dedecms模板】

模板名称:大气智能家居家具装修装饰类企业通用网站织梦模板模板介绍:织梦最新内核开发的模板,适合智能家居家具企业,也可以通用装修行业等企业使用,页面简洁简单,容易管理,DEDE5.5内核以上都可以使用:附带测试数据! 模板特点:1:智能家居家具展示公司模板,代码简洁,风格大气简单,页面干净.2:首页带炫酷的幻灯片,产品展示,新闻展示.3:网站内容都能在后台修改,后台简单易学.4:后台直接修改联系方式.地址.版权信息,网站内容等,修改更加方便. 使用程序:织梦DEDECMS5.5以上版本都可以使用.

C++ 模板的编译 以及 类模板内部的实例化

在C++中,编译器在看到模板的定义的时候,并不立即产生代码,只有在看到用到模板时,比如调用了模板函数 或者 定义了类模板的 对象的时候,编译器才产生特定类型的代码. 一般而言,在调用函数的时候,只需要知道函数的声明即可: 在定义类的对象时,只需要知道类的定义,不需要成员函数的定义. 但是,这对于模板编译是不奏效的,模板要进行实例化,则必须能够访问定义模板的源代码,当调用函数模板以及类模板的成员函数 的时候,需要知道函数的定义. 标准C++对于模板的编译提供了两种策略: 相同之处:"将类定义以及函

模板模式和Comparable类

模板模式中,父类规定好了一些算法的流程,并且空出一些步骤(方法)留给子类填充 Java的数组类中静态方法sort()就是一个模板,它空出了一个compareTo的方法,留给子类填充,用来规定什么是大于.等于和小于 package com.example.template; public class Duck implements Comparable<Duck>{ private String name; private int weight; public Duck(String name,

模板原理和操作数据类的观点【艰难的一天,慢慢的会过去的】

1.模板原理:视图类[将数据输出到模板中,实现对视图的控制] smarty的类实现对视图的控制[展示和smarty的基本语法:smarty需要它的库进行支持] 面向对象的编程中对象的访问和类的访问本质上还是代码空间的访问,区别也在于对象的访问的话,对象之间的属性并不能共享,使用类访 问,会出现类的直接统计[类访问中,经常出现静态成员的原因] 2.对数据的操作 将数据表抽象成一个对象进行操作:这是数据库操作类的使用思路 今天就没有太多可以考虑的东西,就两个比较重要的观念: 今天起,忘记之前的事情,

C#集合篇,在业务背景下(***产品升级管理):依赖注入,变量声明,三元表达式,常用字符串相关操作方法,ADO.NET,EF机制,T4模板自动生成实体类,ref变量巧用,属性实际运用,唯一性验证

QQ:1187362408 欢迎技术交流和学习 关于系统产品升级报告管理,业务需求: TODO: 1,升级报告管理:依据各县区制定升级报告(关联sAreaCode,给每个地区观看具体升级报告信息) 2,运用的技术:依赖注入,变量声明,三元表达式,常用字符串相关操作方法,ADO.NET,EF机制,T4模板自动生成实体类,ref变量与可null变量巧用,属性实际运用,唯一性验证,url传递中文编码和解码问题 讲解篇:1,服务端aspx,2,服务端后台返回数据(这里采用服务器端程序:aspx.cs)