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++模板特化和偏特化,对于别人来说,已经不是什么新东西了,但是对于我来说,的确是我的盲区,那天在群里讨论这个问题,自己对于这部分确实没有掌握,又联想到在《STL源码剖析》一书中,对于此也是有着介绍。...
说起C++的模板及模板特化, 相信很多人都很熟悉,但是说到模板特化的几种类型, 相信了解的人就不是很多。我这里归纳了针对一个模板参数的类模板特化的几种类型, 一 是特化为绝对类型; 二是特化为引用,指针类型;...
C++模板特化匹配规则
主要介绍了C++模板特化与偏特化的相关资料,帮助大家更好的理解和学习c++,感兴趣的朋友可以了解下
函数模板完全特化 C++ Builder 示例 代码参考: 余文溪的《C++ STL --数据结构与算法实现》原书代码为控制台。 这里用 C++ Builder代码演示
一、类模板全特化、偏特化 #pragma once #include #include template class TC { public: TC() { std::cout << "泛化版本构造函数" < class TC { public: TC() { std::cout << "全特化版本...
模板的 主版本模板类、全特化、偏特化
前言关于讲过traits萃取器的时候探讨到偏特化的概念, 而在那一篇文章也没有具体解释偏特化是什么, 怎么实现, 所以可能在第一次看得时候会很莫名其妙. 所以我
我们知道在C++模板编程中如果我们特化或是偏特化某个模板类, 我们需要重写整个模板类中的所有函数, 但是这些代码通常是非常相似的, 甚至在某些情况下可能只有一两个函数会不一样,其他函数都是一样的。...
C++模板类型题型,更全面,也可以更从中了解模板的运用与技术。
泛型容器的设计实现大多只是存储了类型的单个对象,而没有存储类型的多个对象,如果有这样特定的需求,容器内的元素要求都是某个类型的多个对象,那么这时就可以考虑用模板类的数组特化来实现了
C++泛型编程的一本好书,对于对C++泛型感兴趣的人,可以下载看看哦,这本书籍详细的讲了C++ template,模板特化,偏特化等等
C++11前有四个特殊函数,C++11引入移动语义特性,增加了两个参数为右值的特殊函数。这六个函数分别是: 1、默认构造函数 默认构造函数指不需要参数就能初始化的构造函数。包含无参和所有参数有默认值两种类型的构造...
技术基础:操作符重载and模板(泛化, 全特化, 偏特化).mp4 ├─11. 分配器.mp4 ├─12. 容器之间的实现关系与分类.mp4 ├─13. 深度探索list(上).mp4 ├─14. 深度探索list(下).mp4 ├─15. 迭代器的设计原则和...
编译环境: Windows 7 Service Pack 1 C++ Builder Embarcadero RAD Studio XE Version 15.0.3890.34076 代码参考: 余文溪的《C++ STL --数据结构与算法实现》原书代码为控制台。 这里用 C++ Builder代码演示
模板编程中如果要特化或偏特化(局部特化)一个类模板,需要特化该类模板的所有成员函数。类模板中大多数成员函数的功能可能是一模一样的,特化时我们可能只需要重新实现1、2个成员函数即可。在这种情况下,如果全部...
《Qt中的C++技术》讨论了以下内容:类模板特化技术;分析比较了C++标准库、Qt对字符串、数据输入/输出的处理思路;隐式共享与d-pointer技术;函子及其在QTL(Qt Template Library)中的应用,QTL是如何使用模板特化...