`

c++偏特化简单示例

阅读更多

c++偏特化

 

// temp1.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <string.h>
#include <math.h>
using namespace std;

template <class T>
const T& Max(const T& t1, const T& t2);

template<>
char* const& Max(char* const& psz1, char* const& psz2);

template<class T>
class CEqual
{
	static bool IsEqual(const T& lh, const T& rh)
	{
		return lh == rh;
	}
};

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

template <>
class Compare<float>
{
public:
	static bool IsEqual(const float& lh, const float& rh)
	{
		return fabs(lh - rh) < 10e-6;
	}
};

template <>
class Compare<double>
{
	static bool IsEqual(const double& lh, const double& rh)
	{
		return fabs(lh - rh) < 10e-15;
	}
};

int main(int agrc, char** argv)
{
	cout << Compare<int>::IsEqual(1, 3) << endl;
	cout << Compare<int>::IsEqual(3, 3) << endl;
	
	cout << Compare<float>::IsEqual(1.2222f, 1.22223f) << endl;
	cout << Compare<float>::IsEqual(1.222222f, 1.2222223f) << endl;


	cout << Max(5, 10) << endl;
	cout << Max('a', 'z') << endl;
	
	char* psz1 = "hello";
	char* psz2 = "world";

	cout << Max(psz1, psz2) << endl;

	return 0;
}

//前面两个mymax都能返回正确的结果.而第三个却不能,因为,此时mymax直接比较两个指针p1 和 p2 而不是其指向的内容.
//针对这种情况,当mymax函数的参数类型为const char* 时,需要特化。
template <class T>
const T& Max(const T& t1, const T& t2)
{
	return t1 < t2 ? (T&)t2 : (T&)t1;
}

//偏特化:对于指针类型的时候 公共模板函数 就不好处理了,所以c++引入了偏特化
template<>
char* const& Max(char* const& psz1, char* const& psz2)
{
	return (strcmp(psz1, psz2) < 0) ? (char* &)psz2 : (char* &)psz1;
}
 
分享到:
评论

相关推荐

    C++模板之特化与偏特化详解

    对于C++模板特化和偏特化,对于别人来说,已经不是什么新东西了,但是对于我来说,的确是我的盲区,那天在群里讨论这个问题,自己对于这部分确实没有掌握,又联想到在《STL源码剖析》一书中,对于此也是有着介绍。...

    C++模版特化

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

    C++模板特化匹配规则

    C++模板特化匹配规则

    深入分析C++模板特化与偏特化

    主要介绍了C++模板特化与偏特化的相关资料,帮助大家更好的理解和学习c++,感兴趣的朋友可以了解下

    函数模板完全特化 C++ Builder 示例

    函数模板完全特化 C++ Builder 示例 代码参考: 余文溪的《C++ STL --数据结构与算法实现》原书代码为控制台。 这里用 C++ Builder代码演示

    C++ 类模板、函数模板全特化、偏特化的使用

    一、类模板全特化、偏特化 #pragma once #include #include template class TC { public: TC() { std::cout &lt;&lt; "泛化版本构造函数" &lt; class TC { public: TC() { std::cout &lt;&lt; "全特化版本...

    模板的 主版本模板类、全特化、偏特化

    模板的 主版本模板类、全特化、偏特化

    FunctionDou#STL#8 全特化和偏特化1

    前言关于讲过traits萃取器的时候探讨到偏特化的概念, 而在那一篇文章也没有具体解释偏特化是什么, 怎么实现, 所以可能在第一次看得时候会很莫名其妙. 所以我

    在C++泛型编程中如何只特化类的某个成员函数

    我们知道在C++模板编程中如果我们特化或是偏特化某个模板类, 我们需要重写整个模板类中的所有函数, 但是这些代码通常是非常相似的, 甚至在某些情况下可能只有一两个函数会不一样,其他函数都是一样的。...

    C++中有关模板的试题题型练习题

    C++模板类型题型,更全面,也可以更从中了解模板的运用与技术。

    数组特化模板类

    泛型容器的设计实现大多只是存储了类型的单个对象,而没有存储类型的多个对象,如果有这样特定的需求,容器内的元素要求都是某个类型的多个对象,那么这时就可以考虑用模板类的数组特化来实现了

    C++ Tempates中文版

    C++泛型编程的一本好书,对于对C++泛型感兴趣的人,可以下载看看哦,这本书籍详细的讲了C++ template,模板特化,偏特化等等

    C++类中的特殊成员函数示例详解

    C++11前有四个特殊函数,C++11引入移动语义特性,增加了两个参数为右值的特殊函数。这六个函数分别是: 1、默认构造函数 默认构造函数指不需要参数就能初始化的构造函数。包含无参和所有参数有默认值两种类型的构造...

    难得C++全栈!侯捷老师C++天龙八部合集+专业辅导 C++技能超级实战+算法实践+系统设计

    技术基础:操作符重载and模板(泛化, 全特化, 偏特化).mp4 ├─11. 分配器.mp4 ├─12. 容器之间的实现关系与分类.mp4 ├─13. 深度探索list(上).mp4 ├─14. 深度探索list(下).mp4 ├─15. 迭代器的设计原则和...

    类模板完全特化 C++ Builder演示

    编译环境: Windows 7 Service Pack 1 C++ Builder Embarcadero RAD Studio XE Version 15.0.3890.34076 代码参考: 余文溪的《C++ STL --数据结构与算法实现》原书代码为控制台。 这里用 C++ Builder代码演示

    C++模板编程中只特化模板类的一个成员函数

    模板编程中如果要特化或偏特化(局部特化)一个类模板,需要特化该类模板的所有成员函数。类模板中大多数成员函数的功能可能是一模一样的,特化时我们可能只需要重新实现1、2个成员函数即可。在这种情况下,如果全部...

    《Qt中的C++技术》

    《Qt中的C++技术》讨论了以下内容:类模板特化技术;分析比较了C++标准库、Qt对字符串、数据输入/输出的处理思路;隐式共享与d-pointer技术;函子及其在QTL(Qt Template Library)中的应用,QTL是如何使用模板特化...

Global site tag (gtag.js) - Google Analytics