C++ Primer 5th笔记(chap 16 模板和泛型编程)模板特例化

Posted thefist11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ Primer 5th笔记(chap 16 模板和泛型编程)模板特例化相关的知识,希望对你有一定的参考价值。

1. 场景

//第一个版本;可以比较任意两个类型
template <typename T> int compare (const T &, const T & );

//第二个版本处理字符串字面常量
template<size_t N, size_t M> int compare (const char ( & ) [N], const char ( & ) [M] );

const char *pl = "hi", *p2 = "mom";
compare (pi, p2 );// 调用第一个模板
compare ("hi", "mom" } ;// 调用有两个非类型参数的版本

2. 解决

当我们不能( 或不希望) 使用模板版本时, 可以定义类或函数模板的个特例化版本

  • 一个特例化版本就是模板的一个独立的定义, 在其中一个或多个模板参数被指定为特定的类型
  • 当我们特例化一个函数模板时, 必须为原模板中的每个模板参数都提供实参。
// compare 的特殊版本, 处理字符数组的指针
template <> int compare (const char* const &pl, const char* const &p2)
{
    return strcmp (pi, p2);
}

当我们定义一个特例化版本时, 函数参数类型必须与一个先前声明的模板中对应的类型匹配。

template int compare (const T &, const T & );// T 为 const char *

2.1 函数重载与模板特例化

一个特例化版本本质上是一个实例, 而非函数名的一个重载版本。
特例化的本质是实例化一个模板, 而非重栽它 D 因此, 特例化不影响函数匹配

以上是关于C++ Primer 5th笔记(chap 16 模板和泛型编程)模板特例化的主要内容,如果未能解决你的问题,请参考以下文章

C++ Primer 5th笔记(chap 16 模板和泛型编程)std::move

C++ Primer 5th笔记(chap 16 模板和泛型编程)模板特例化

C++ Primer 5th笔记(chap 16 模板和泛型编程)类模板特例化

C++ Primer 5th笔记(chap 16 模板和泛型编程)实例化

C++ Primer 5th笔记(chap 16 模板和泛型编程)可变参数模板

C++ Primer 5th笔记(chap 16 模板和泛型编程)模板实参