C++类模板的三种特化

说起C++的模板及模板特化,相信很多人都很熟悉,但是说到模板特化的几种类型,相信了解的人就不是很多。我这里归纳了模板特化的几种类型,一是特化为绝对类型;而是特化为引用,指针类型;三是特化为另外一个模板类。

这里用一个简单的例子来说明这三种情况:

// general version
template<class T>
class Compare
{
public:
    static bool IsEqual(const T& lh, const T& rh)
    {
        return lh == rh;
    }
};

这是一个用于比较的模板类,里面可以有多种用于比较的函数,以IsEqual为例。

一、特化为绝对类型

也就是说直接为某个特定类型做特化,这是我们最常见的一种特化方式,如特化为float,double等

// specialize for float
template<>
class Compare<float>
{
public:
    static bool IsEqual(const float& lh, const float& rh)
    {
        return abs(lh - rh) < 10e-3;
    }
};
// specialize for double
template<>
class Compare<double>
{
public:
    static bool IsEqual(const double& lh, const double& rh)
    {
        return abs(lh - rh) < 10e-6;
    }
};

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c++
, 模板
, const
, 类模板
, double
, 类型
, 特化
偏特化
c 模板特化、c 函数模板特化、c模板偏特化、c 模板 特化 void、c 模板类 特化,以便于您获取更多的相关知识。

时间: 2024-08-01 14:24:59

C++类模板的三种特化的相关文章

解读C++编程中类模板的三种特化_C 语言

1.类模板显式特化为了进行特化,首先需要一个通用的版本,称主模板.主模板使用了标准库堆算法.  堆 是一种线性化的树形结构,将一个值压入一个堆中, 实际上等于将该值插入到一个树形结构中;将一个值从堆中取出就等于移除并返回堆中最大值.但在处理字符的指针时会碰钉子.堆将按照指针的值进行组织. 我们可以提供一个显式特化版本解决此问题(例1)如果希望除了一个针对const char*的Heap外,还希望提供一个针对char *的Heap;(例2) //主模板 template <typename T>

生活服务类网站的三种形态

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断淘宝客 站长团购 云主机 技术大厅 写下这个标题后,我立马想起两个事情:第一个昨晚在饭桌上和百度前CTO.爱帮网CEO刘建国老师探讨的生活服务类网站的现状,第二个事情是这个现状让我想起了三国时期. 汉末,天下大乱,诸侯纷争.继而有如诸葛.子敬者先后曰必成三国鼎立之势.后果如其言.此天意乎,人力乎?这几年渐成气候的生活服务类网站也是如此,也是"天下大乱,诸侯纷争

教育类网站的三种不同级别的盈利模式

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 因为笔者一直从事于教育战线,所以就做了教育类型的网站,并且通过自己不断的实践和摸索,想要挖掘出教育类型的网站的各种盈利模式,经过近两年的努力,其中也陷入到各种各样的误区,目前也算是有了一点自己的心得,于是就把写出来希望能够帮助广大的新手站长们! 教育站的优势主要在于市场的庞大,不论是在广度上还是在细分上都能够大有作为,都有让你充分挖掘盈利的空

tkinter 类继承的三种方式

tkinter class继承有三种方式. 提醒注意这几种继承的运行方式 一.继承 object 1.铺tk.Frame给parent: 说明: self.rootframe = tk.Frame(parent) tk.Label(self.rootframe) import tkinter as tk class MyApp(object): def __init__(self, parent): self.rootframe = tk.Frame(parent) self.rootframe

java反射2——Class类实例化的三种方法

package cn.classes; public class OneClass { }   package cn.test; import cn.classes.OneClass; public class Test {  public static void main(String[] args)  {   Class<?> c1 = null;   Class<?> c2 = null;   Class<?> c3 = null;   try   {      

类模板

---恢复内容开始--- 感觉C++ templates这本书写的不怎么好,挑写重点记一下: 1 与函数模板一样,只能在同一个头文件中声明和定义类. 类模板的声明 类模板的声明和函数模板的声明很相似:在声明之前,我们先(用一条语句)声明作为类型参数的标志符:我们继续使用T作为标志符: template <typename T> class Stack{ ... }; 在此,我们可以使用关键字class代替typename. 在类模板的内部,T可以像其他任何类型一样,用于声明成员变量和成员函数.

Javascript定义类(class)的三种方法

将近20年前,Javascript诞生的时候,只是一种简单的网页脚本语言.如果你忘了填写用户名,它就跳出一个警告. 如今,它变得几乎无所不能,从前端到后端,有着各种匪夷所思的用途.程序员用它完成越来越庞大的项目. Javascript代码的复杂度也直线上升.单个网页包含10000行Javascript代码,早就司空见惯.2010年,一个工程师透露,Gmail的代码长度是443000行! 编写和维护如此复杂的代码,必须使用模块化策略.目前,业界的主流做法是采用"面向对象编程".因此,Ja

Javascript定义类(class)的三种方法详解_javascript技巧

将近20年前,Javascript诞生的时候,只是一种简单的网页脚本语言.如果你忘了填写用户名,它就跳出一个警告. 如今,它变得几乎无所不能,从前端到后端,有着各种匪夷所思的用途.程序员用它完成越来越庞大的项目. Javascript代码的复杂度也直线上升.单个网页包含10000行Javascript代码,早就司空见惯.2010年,一个工程师透露,Gmail的代码长度是443000行! 编写和维护如此复杂的代码,必须使用模块化策略.目前,业界的主流做法是采用"面向对象编程".因此,Ja

java中三种方式获得类的字节码文件对象

package get_class_method; public class ReflectDemo { /** * @param args */ public static void main(String[] args) { getClassObject1(); getClassObject2(); getClassObject3(); } public static void getClassObject1(){ Person p = new Person(); System.out.pr