这样做有什么好理由?
template <class BaseClass>
class DerivedClass : public BaseClass
{
}
我正在查看同事的代码,我看到了这种模式,我觉得这很奇怪。
我能想到的唯一原因是,在DerivedClass中,您可能需要构建一堆BaseClass实例。当您编写代码时,您不知道BaseClass可能是什么,因此您需要使用它进行参数化。
但是,我不认为他这样做。
那你为什么要做那样的事呢?
答案 0 :(得分:1)
如果DerivedClass
是一个可以扩展各种BaseClass
中任何一个的接口适配器,这很有用。
它类似于CRTP,其中基础在派生类上进行参数化。但是在这种模式中,基础没有被任何参数化,因此它不是模板,因此避免了模板膨胀。
在CRTP中,基础是模板式的抽象(但不是多态的)。它指定了一个只有部分实现的接口,static_cast
本身就是派生类型,因此覆盖了与真实抽象类中virtual
函数类似的概念基础。
在此模式中,您有一个具体的基类和一个具体的派生类。没有什么是抽象的,所以概念更清晰。