首页 > 其他分享 >模板的全特化与偏特化

模板的全特化与偏特化

时间:2023-04-10 15:03:26浏览次数:31  
标签:cout T2 char Test 模板 特化


模板为什么要特化,因为编译器认为,对于特定的类型,如果你能对某一功能更好的实现,那么就该听你的。

模板分为类模板与函数模板,特化分为全特化与偏特化。全特化就是限定死模板实现的具体类型,偏特化就是如果这个模板有多个类型,那么只限定其中的一部分。

先看类模板:


template<typename T1, typename T2>
class Test
{
public:
	Test(T1 i,T2 j):a(i),b(j){cout<<"模板类"<<endl;}
private:
	T1 a;
	T2 b;
};

template<>
class Test<int , char>
{
public:
	Test(int i, char j):a(i),b(j){cout<<"全特化"<<endl;}
private:
	int a;
	char b;
};

template <typename T2>
class Test<char, T2>
{
public:
	Test(char i, T2 j):a(i),b(j){cout<<"偏特化"<<endl;}
private:
	char a;
	T2 b;
};


那么下面3句依次调用类模板、全特化与偏特化:


Test<double , double> t1(0.1,0.2);
	Test<int , char> t2(1,'A');
	Test<char, bool> t3('A',true);


而对于函数模板,却只有全特化,不能偏特化:

//模板函数
template<typename T1, typename T2>
void fun(T1 a , T2 b)
{
	cout<<"模板函数"<<endl;
}

//全特化
template<>
void fun<int ,char >(int a, char b)
{
	cout<<"全特化"<<endl;
}

//函数不存在偏特化:下面的代码是错误的
/*
template<typename T2>
void fun<char,T2>(char a, T2 b)
{
	cout<<"偏特化"<<endl;
}
*/


至于为什么函数不能偏特化,似乎不是因为语言实现不了,而是因为偏特化的功能可以通过函数的重载完成。


标签:cout,T2,char,Test,模板,特化
From: https://blog.51cto.com/u_130277/6180912

相关文章

  • 抖音小店运费模板如何设置?偏远地区不包邮设置教程
    在抖店里面,它默认的是所有商品都包邮,如果不去手动更改,那么像新疆西藏这种偏远地区产生的高额运费,就只能自己承担了,或者是及时发现选择不发货,这样又会被扣分扣保证金。创建运费模板1)选择【商品】,点击【商品创建】右边的【新建运费模板】​编辑切换为居中......
  • 电影网页设计模板代码 大学生电影网站设计与制作
    作品介绍大学生电影网站设计与制作html网页成品采用DIVCSS布局制作,主题为我的喜欢的电影榜单,作品包括1个首页和6个电影介绍子页面,共7个页面。整体设置了网页背景图片,首页顶部使用CSS3制作了LOGO鼠标经过放大效果,下方为6部电影封面图,点击可以进入电影介绍的子页面。每个电影子页面......
  • 模板匹配
    #include"opencv2/highgui/highgui.hpp"#include"opencv2/imgproc/imgproc.hpp"usingnamespacecv;//-----------------------------------【宏定义部分】--------------------------------------------//描述:定义一些辅助宏//---------------------------......
  • Js 之art-template模板引擎
    一、文档http://aui.github.io/art-template/zh-cn/二、示例代码<html><head><title>art-template模板引擎</title></head><body><div><divid="span"><divid="tpl1">......
  • 完美的模板CSS
    body{ margin:0px; padding:0px;}.left{ background:#313541; width:20%; float:left; position:absolute; top:0px; bottom:0px;}.top{ width:80%; float:right; height:100px; line-height:100px; border-bottom:1pxsolid#b0cdff;}.content{ float:r......
  • 模板中的HTML标签用法
    1.if条件判断,HTML中不用冒号“:”,而是用{%%}包裹语句。要有endif结尾。{%iflatest_question_list%}XXX{%else%}XXX{%endif%}2.for循环,也需要用{%%}包裹语句。要有endfor结尾{%forqinlatest_question_list%}XXX......
  • 2023.4.7【模板】快速沃尔什变换FWT
    2023.4.7【模板】快速沃尔什变换FWT题目概述给定长度为\(2^n\)两个序列\(A,B\),设\(C_i=\sum_{j\oplusk=i}A_j\timesB_k\)分别当\(\oplus\)是or,and,xor时求出\(C\)我们通常将这个操作,叫做“位运算卷积”,因为它的卷积是按照位运算法则“卷”起来的。算法流程或......
  • 【模板】高斯消元
    #include<bits/stdc++.h>usingnamespacestd;constdoubleeps=1e-10;doubleuu,a[52][52],b[52];intn,l[52];boolpd;inlinevoidzzd(int&maxx,inti,intcnt){ for(intj=cnt+1;j<=n;++j){//找系数最大值 if(fabs(a[j][i])>fabs(a[maxx][i])) max......
  • 使用模板窗口生成测试数据
    1.准备工作*需要的环境1.Oralce、MySQL、PG等主流数据库2.HHDBCS7.6及以上版本*测试步骤1.建立两张表带有主外键关系2.使用模板窗口生成数据,主键表生成100条,外键表生成10000条3.校验数据生成情况2.建立两张表带有主外键关系--主键表createtabledept(d_id......
  • [mybatis-config.xml] 模板
    <?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTDConfig3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><ty......