22、C++ 模板与继承的高级技巧

C++ 模板与继承的高级技巧

1. 特性与策略类

1.1 特性模板的起源与发展

Nathan Myers 最早将特性参数的概念形式化。最初,他将其以“行李模板”(baggage templates)的名称呈现给 C++ 标准化委员会,用于定义标准库组件中字符类型的处理方式。不过,部分委员会成员不喜欢“行李”这个术语,于是“特性”(traits)这个名称被推广使用,并且此后得到了广泛应用。

1.2 特性模板的使用与注意事项

客户端代码通常无需处理特性,因为默认的特性类能满足大多数常见需求,而且它们作为默认模板参数,无需在客户端源代码中显式出现。因此,默认特性模板宜使用较长的描述性名称。当客户端代码通过提供自定义特性参数来调整模板行为时,将结果特化 typedef 为适合自定义行为的名称是个不错的做法。

特性模板并不局限于类模板。若只需提供单个策略特性,可将其作为普通函数模板传递,示例代码如下:

template <typename T, void (*Policy)(T const&, T const&)>
class X;

但特性的初衷是减少次要模板参数的“负担”,若仅将单个特性封装在模板参数中,就无法达成这一目标,这也解释了 Myers 倾向于用“行李”来指代特性集合的原因。

1.3 标准库中的特性模板

标准库定义了多个特性模板,具体如下:
| 特性模板 | 用途 |
| ---- | ---- |
|

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值