`

c++ - template function specialization

    博客分类:
  • c++
c++ 
阅读更多

In this post, we are going to discuss the template function specialiation ;

so what is "template function specialiation"?

 

 given an example, for the following function template

  template <class T>
     T max (T t1, T t2) 
	 {
	    return (t1 > t2 ? t1 : t2);
     }
it works for most value types, however what if the type passed in is a pointer, list const char *, or what if the function does not provide the less than operator and it provides some alternatives;

 

In such situation we might provide a specified template with a more explicity value of parameter type and define/declare the template's body for that specialized type parameter.

 

to declare the specialization of max for template argument of const char * (typedefed as PCC), you can do this :

 

// the below is the template specialization on the type argument of const char * (typedefed as PCC)
typedef const char * PCC;

using std::strcmp;


template<>
PCC max<PCC>(PCC t1, PCC t2)
{
	return (strcmp(t1, t2) > 0 ? t1 : t2);
}

 

there is on tip, if the template argument can be deduced, we can omit the <T> part after the function's name in the function's explicit specializationm, use this:

 

 

// it is possible to omit the template argument if the type of 
// template argument can be deduced from the the function parameters
template<>
PCC max(PCC t1, PCC t2) 
{
	return (strcmp(t1, t2) >0 ? t1 : t2);
}
 

there are some pith/gist/quintessence/essence points that you may want to know about the function template expclit specialization.

 

1. specialiation visiblity rule

 

if you provide a function template specialiation, it should be visible in every file that uses it. otherwise, there would be compilation error (you can not hvae some instantiation for the same template argument from the generic template function, and some instantiation from the specializatoin)

 

normally, you should put the specialization in the header file with the generic template.

 

2. namespace rule

 

Second, the function template specialiation should be in the same namespace as the template that it specialize

 

below shows an error that can be generated through the code below. 

 

// primer.h
namespace cplusplus_primer {
  template <class type>
    type min(Type* array, int size) { /* ... * / }

}

// user.h
class SmallInt { /*   * / } 

// user.C
template< > SmallInt min(SmallInt * array, int size); // this is an error, because it is a differente namespace from the generic template.
 
分享到:
评论

相关推荐

    Practical C++ Programming C++编程实践

    Templates: The Hard Way Templates: The C++ Way Function Specialization Class Templates Class Specialization Implementation Details Advanced Features Summary Programming Exercises 25. Standard ...

    C++ Templates

    6. **模板的部分特化(Template Partial Specialization)** - 类模板的特性,允许为模板的部分参数提供特化。 - 例如,为只改变第一个类型参数的`MyClass, T2&gt;`提供特化版本。 7. **模板元编程(Template ...

    C++ 标准 ISO 14882-2011

    模板参数(Template parameters)、模板特化的名称(Names of template specializations)、模板...specialization)、函数模板特化(Function template specializations)详细阐述了C++模板的定义、特化和实例化过程...

    Exploring C++ 11

    Part 3: Generic Programming – Template Specialization Part 3: Generic Programming – Partial Specialization Part 3: Generic Programming – Names and Namespaces Part 3: Generic Programming – ...

    东南大学-C++语言程序设计-上第36-40讲-(全80讲)

    此外,他还讲解了标准模板库(Standard Template Library, STL),包括容器(container)、迭代器(iterator)、算法(algorithm)和函数对象(function object),这些是C++高效编程的基础。 4. 第39讲:异常处理 ...

    c++函数库查询辞典

    4. C++99标准:C++99是C++的一个重要版本,引入了若干新特性,如命名空间(namespace)、内联变量(inline variables)、局部类(local classes)、模板的部分特化(partial template specialization)、迭代器分类...

    C++ Primer Plus 第五版源程序

    在源码中,你可以看到函数模板、类模板的使用,以及模板特化(template specialization)和模板元编程(metaprogramming)的示例。 最后,C++11和C++14引入了许多新特性,如右值引用(rvalue reference)、lambda...

    The Annotated C++ Reference Manual(ARM)-Ch17

    - **模板特化**(Template Specialization):允许对特定类型或类型组合提供不同的模板实现。 - **模板元编程**(Template Metaprogramming):使用模板来在编译时执行计算和代码生成。 #### 6. 内联函数与内联变量...

    C++编程实例详解C++fromscratch_10206905

    4. **模板**:学习如何编写模板函数和模板类,以及模板特化(Template Specialization)和模板元编程(Template Metaprogramming)。 5. **STL(标准模板库)**:STL包括容器(如vector、list、set)、迭代器、算法...

    Standard Template Library (STL)

    - **模板特化(Template Specialization)**:允许为特定类型提供不同的实现,从而优化性能或实现特定于类型的行为。 STL概述: STL由以下几个主要部分组成: 1. **容器(Containers)**:提供了一系列数据结构...

    2011-2012学年第一学期 期末考试 C++语言面向对象分析与设计 试题试卷A.pdf

    包括函数模板和类模板,以及模板特化(template specialization)和模板元编程(metaprogramming)。 5. **STL(Standard Template Library)**:C++标准模板库包含容器(如vector、list、map等)、算法(如sort、...

    C++20 Concepts简介

    ##### 3.6 模板特化 (Template Specialization) Concepts 使得编写特定于类型的行为变得更加容易,通过特化可以为不同类型的输入提供不同的实现。 ```cpp template concept bool IsString = std::is_same, std::...

    C++课程资料4

    在C++中,多态性主要通过虚函数(Virtual Function)和纯虚函数(Pure Virtual Function)实现。学员将学习如何使用虚函数实现动态绑定,以及如何设计抽象类。 4. **模板(Template)**:C++模板提供了泛型编程的...

    C++ 多范型设计.rar

    多范型设计还涉及到模板特化(template specialization)。在某些情况下,我们可能希望为特定的数据类型提供定制的实现,这时可以使用模板特化。例如,为模板函数或类模板定义一个专门处理某种类型的行为。 此外,...

    C++标准程序库_详细三级目录

    其中,模板机制(template mechanism)是学习泛型技术及STL的基石,涉及函数模板(function templates)、成员模板(member templates)、特化(specialization)等概念。 为了更好地运用STL,学习者需要深入理解...

    吉林大学 C++/oop 模拟试题

    试题可能涵盖函数模板、类模板以及模板特化(template specialization)的概念。 9. **STL(Standard Template Library)** STL是C++的标准模板库,包括容器(如vector、list、set)、迭代器、算法和函数对象。...

    C++程序设计基础教程 苏大C++程序设计教程(第二版) 第14章 模板(共32页).pptx

    1. **函数模板** (Function Template) 函数模板是为了解决相同功能但针对不同数据类型的函数重载。例如,`swap` 函数就是一个常见的例子,它用于交换两个变量的值。使用函数模板可以避免为每种数据类型编写单独的`...

    c++课件\钱能C++程序设计教程(第二版)课件\14 模板.ppt

    1. **函数模板** (Function Template) 函数模板用于创建一组可重载的函数,它们共享相同的函数体,但能够处理不同类型的数据。以`swap`函数为例,传统的重载可能针对不同类型的变量编写多个版本,但函数模板只需要...

    c++21天学通 源代码

    函数模板、类模板以及模板特化(template specialization)都是这一章的关键点。 第15章通常会讨论STL(Standard Template Library,标准模板库),这是C++库的核心部分。你会学到容器(container)如vector、list...

Global site tag (gtag.js) - Google Analytics