基于策略的设计:原理、应用与权衡
1. 策略的添加与转换策略模板
在基于策略的设计中,策略会为派生类添加所需的公共成员函数运算符。由于这些策略是模板,需要用派生类类型进行实例化,因此转换策略是一个模板模板参数,其使用遵循 CRTP(Curiously Recurring Template Pattern)。以下是一个示例代码:
// Example 26
template <typename T, ... other policies ...
template <typename, typename>
class ConversionPolicy = ExplicitRaw>
class SmartPtr : ... other base policies ...,
public ConversionPolicy<SmartPtr<... paramerers ...>, T>
{
T* p_;
template<typename, typename>
friend class ConversionPolicy;
public:
...
};
这里要注意模板模板参数的使用, ConversionPolicy 不是一个类型,而是一个模板。在从该策略的实例化中继承时,我们必须写出 SmartPtr 类的完整类型,包括其所有模板参数。我们将转换策略设计为两个参数的模板(第二个参数是对象类型 T
超级会员免费看
订阅专栏 解锁全文
84万+

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



