模板偏特化 指针 模板萃取 指针

本文介绍了C++中的模板特化,包括全特化和部分特化,以及如何在迭代器中使用`iterator_traits`来萃取指针所指对象的类型。针对原生指针,通过模板偏特化处理了非const和const指针的情况,使得函数`func`能够支持智能指针和原生指针,成功萃取出所需类型。
摘要由CSDN通过智能技术生成

C++相关语法基础

模板特化(template specialization)

通用模板对于某种特定的类型可能是错误的,所以可能需要对特定的类型单独定义模板的实现。另一方面,可以利用特定类型的特点进行优化。

模板特化是指这样一个定义,该定义指定一个或多个模板的形参实际类型或值。 形式如下:

  • template<>
  • 模板名(可以是函数或类)加一对尖括号,尖括号中指定模板形参的实际类型。
  • 函数形参表和函数体或类定义。

示例:

1
2
3
4
5
6
7
8
9
10
11
template <class T1, class T2>
class some_template
{
          
  // ...
};

template <>
class some_template<string, int>
{
          
  // ...
};

类模板的部分特化(partial specialization)

部分特化是指针对template参数更进一步的条件限制所涉及出来的一个特化版本。 这里的更进一步的条件限制并不仅限于指定模板形参的实际类型。 编译器在实例化时,优先使用特化的版本。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
template <class T1, class T2>
class some_template
{
          
  // ...
};

template <class
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值