40、基于策略的设计:高级技术与测试应用

基于策略的设计:高级技术与测试应用

1. 引言

在之前的基础上,我们已经了解了将策略对象融入基于策略的类的三种方式:组合、继承(公有或私有)以及仅在编译时融入。现在,我们将深入探讨基于策略设计的更高级技术。

2. 高级策略设计基础

基于策略的设计的基础技术包括:策略可以是类、模板实例化或模板(通过模板模板参数使用)。策略类可以进行组合、继承或在编译时静态使用。若策略需要知晓主策略类的类型,可使用 CRTP(奇异递归模板模式)。其余部分大多是对同一主题的变体,以及组合多种技术以实现新功能的巧妙方法。

3. 构造函数策略

策略可用于定制实现的几乎任何方面,以及更改类接口。但在使用策略定制类构造函数时,会面临独特挑战。

以智能指针为例,当前智能指针在被删除时,其拥有的对象也会被删除。若支持 release() 方法,可手动控制对象删除,但这种方式易出错。更好的方法是使用移动构造函数将对象所有权从一个指针转移到另一个指针:

SmartPtr<C> p1(new C);
SmartPtr<C> p2(std::move(p1));

为支持该功能,需实现移动构造函数。同时,有时可能需要阻止所有权转移,因此可引入移动策略来控制是否支持移动:

template <typename T,
          typename DeletionPolicy = DeleteByOpera
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值