`

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++模板特化概述与详解 在C++编程语言中,模板特化是一种非常重要的机制,它允许程序员为特定类型的模板提供定制化的实现。本文将深入探讨C++中的类模板特化,尤其是针对单个模板参数的不同特化类型:特化为...

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

    - **函数模板偏特化**:未在示例中展示,但原理类似,可以为模板的某些参数类型组合提供特定实现,而其他参数保持通用。 4. **类模板偏特化**: - 类模板偏特化可以针对部分模板参数或参数特性进行特化,比如,...

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

    模板全特化和偏特化是C++中提高代码复用和灵活性的重要手段。全特化为模板创建了一个全新的、独立的实体,而偏特化则是在原有模板基础上为特定情况提供了定制的实现。理解并熟练运用这两者,能帮助程序员编写更加...

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

    ### 模板的主版本模板类、全特化、偏特化详解 #### 一、主版本模板类 ...综上所述,通过主版本模板类、全特化和偏特化等机制,C++ 模板提供了强大的泛型编程能力,使得开发者能够编写出高度可复用且性能优越的代码。

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

    在C++编程中,函数模板是一种强大的工具,它允许我们编写通用代码,这些代码可以处理不同类型的数据。...在C++ Builder中,你可以通过创建项目、编写源代码并使用窗体描述文件来构建一个包含完全特化示例的应用程序。

    C++编程思想 全部示例代码及习题解答

    《C++编程思想》是 ...通过对《C++编程思想》中的示例代码和习题的研读和实践,读者不仅可以掌握C++语言的基本语法,还能深入理解面向对象的设计原则,并能够在实际项目中灵活运用。这是一条通往精通C++的必经之路。

    C++入门学习——模板示例代码

    本篇文章将深入探讨C++模板的基本概念、类型和函数模板,以及模板特化和元编程等高级主题。 首先,我们要理解C++中的模板分为两种:类型模板和函数模板。类型模板主要用于定义泛型类,而函数模板则用于创建泛型函数...

    c++ primer第四版示例源代码

    这些示例涵盖了从简单的数据类型操作到复杂的面向对象编程技巧,是学习和提升C++技能的宝贵资源。 总的来说,《C++ Primer 第四版》示例源代码压缩包为学习者提供了一个实际操作的平台,让理论知识与实践相结合,...

    《C++入门很简单》一书第10章源文件

    《C++入门很简单》这本书显然致力于以易懂的方式教授这门复杂的语言。从描述中我们可以推测,这个压缩包包含的是与书中第10章相关的源代码示例,这些示例旨在辅助读者实践并巩固理论知识。 C++是一个强大的、通用的...

    C++ 模板使用示例,demo程序

    5. **模板偏特化**:当需要为类模板的一部分类型参数提供不同的实现时,可以使用模板偏特化。 6. **模板引用和指针**:模板与指针和引用的结合,如 `const` 和 `volatile` 关键字在模板中的应用。 通过分析和运行...

    C++模板示例

    下面是一个简单的函数模板示例,用于交换两个变量的值: ```cpp template void swap(T& a, T& b) { T temp = a; a = b; b = temp; } ``` 这个模板可以处理`int`、`float`、`double`甚至是自定义数据类型。 **...

    C++程序开发例题与习题(知识点+示例讲解)

    学习模板的定义和实例化,以及模板特化。 8. **输入/输出流**:C++的I/O流库(iostream)提供了一种方便的机制来读写数据。掌握`std::cin`、`std::cout`以及其他流对象的使用,理解流格式控制。 9. **异常处理**:...

    数组特化模板类

    本文将深入探讨如何利用模板类的数组特化来实现这一目标,并通过具体的示例代码展示其实现过程。 #### 二、基本概念:泛型容器与数组特化 通常,泛型容器(如`std::vector`)被设计成能够存储任何类型的单个或多个...

    C++ Primer中文第四版配套实例

    《C++ Primer中文第四版配套实例》是一本深入学习C++编程语言的重要参考资料,它与国际知名编程教材《C++ Primer》第四版紧密结合,旨在帮助读者通过实践加深对C++概念的理解。本套实例覆盖了C++语言的核心特性和...

    c++模板元编程代码

    3. **类型级别的条件语句**:通过模板特化和SFINAE(Substitution Failure Is Not An Error)原则,可以实现编译时的条件判断。 4. **类型级别的迭代**:虽然C++本身没有内置的元循环,但可以通过递归模板来模拟迭代...

    C++ Tempates中文版

    本书不仅仅是对C++模板技术的介绍,它还深入探讨了模板的高级特性,如模板特化和偏特化等概念,对于希望深入理解和掌握C++泛型编程技术的读者来说,这是一本不可多得的参考书。 泛型编程是C++中非常核心的一个概念...

    微软官方C++ demo

    4. **模板**:函数模板、类模板,以及模板特化和偏特化。 5. **异常处理**:try、catch、throw机制,自定义异常类。 6. **C++11及更高版本的新特性**:智能指针(unique_ptr、shared_ptr、weak_ptr)、lambda...

    C/C++结构体序列化配置模板化

    当然,这只是一个简单的例子,实际的序列化可能需要更复杂的逻辑,例如处理嵌套的结构体、数组或自定义类型。为了简化代码并减少重复,可以考虑使用元编程技术,比如在编译时构建序列化函数。 另外,考虑到配置文件...

    C++Templates 中文版

    《C++ Templates 中文版》是由著名C++专家侯捷翻译的一本关于C++模板深入解析的书籍。这本书深入探讨了C++模板这一强大的泛型...书中详尽的示例和解释将有助于理论知识与实践应用的结合,使开发者在C++世界中游刃有余。

Global site tag (gtag.js) - Google Analytics