虚拟构造函数、工厂模式与模板方法模式解析
1. 虚拟构造函数与工厂模式
1.1 现有方法的缺点
在实现虚拟构造函数的过程中,当前方法存在显著缺点。其一,需要将基类设为模板类,这导致在通用代码中无法使用通用指针类型,或者需要更广泛地使用模板。其二,该方法仅在没有更多类从派生类派生时才有效,因为基类类型无法跟踪第二次派生,仅能处理实例化基类模板的那次派生。总体而言,除非在必须返回确切类型而非基类类型的特定情况下,否则不建议采用此方法。
1.2 CRTP 用于工厂实现
CRTP(Curiously Recurring Template Pattern)有时既作为设计工具,也作为实现技术使用。这里我们聚焦于使用 CRTP 避免在每个派生类中编写 clone() 函数,这不仅能减少代码输入,还能降低出错概率。以下是具体实现代码:
class Base {
public:
virtual Base* clone() const = 0;
};
template <typename Derived> class Cloner : public Base {
public:
Base* clone() const {
return new Derived(*static_cast<const Derived*>(this));
}
};
class Derived : public Cloner<Derived> {
...
};
Base* b0(new Deri
超级会员免费看
订阅专栏 解锁全文
2568

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



