基于策略的设计:高级技术与测试应用
1. 引言
在之前的基础上,我们已经了解了将策略对象融入基于策略的类的三种方式:组合、继承(公有或私有)以及仅在编译时融入。现在,我们将深入探讨基于策略设计的更高级技术。
2. 高级策略设计基础
基于策略的设计的基础技术包括:策略可以是类、模板实例化或模板(通过模板模板参数使用)。策略类可以进行组合、继承或在编译时静态使用。若策略需要知晓主策略类的类型,可使用 CRTP(奇异递归模板模式)。其余部分大多是对同一主题的变体,以及组合多种技术以实现新功能的巧妙方法。
3. 构造函数策略
策略可用于定制实现的几乎任何方面,以及更改类接口。但在使用策略定制类构造函数时,会面临独特挑战。
以智能指针为例,当前智能指针在被删除时,其拥有的对象也会被删除。若支持 release() 方法,可手动控制对象删除,但这种方式易出错。更好的方法是使用移动构造函数将对象所有权从一个指针转移到另一个指针:
SmartPtr<C> p1(new C);
SmartPtr<C> p2(std::move(p1));
为支持该功能,需实现移动构造函数。同时,有时可能需要阻止所有权转移,因此可引入移动策略来控制是否支持移动:
template <typename T,
typename DeletionPolicy = DeleteByOpera
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



