C ++:为什么要使用同一个类进行扩展和参数化?

时间:2014-03-31 02:10:54

标签: c++ templates inheritance

这样做有什么好理由?

template <class BaseClass>
class DerivedClass : public BaseClass
{
}

我正在查看同事的代码,我看到了这种模式,我觉得这很奇怪。

我能想到的唯一原因是,在DerivedClass中,您可能需要构建一堆BaseClass实例。当您编写代码时,您不知道BaseClass可能是什么,因此您需要使用它进行参数化。

但是,我不认为他这样做。

那你为什么要做那样的事呢?

1 个答案:

答案 0 :(得分:1)

如果DerivedClass是一个可以扩展各种BaseClass中任何一个的接口适配器,这很有用。

它类似于CRTP,其中基础在派生类上进行参数化。但是在这种模式中,基础没有被任何参数化,因此它不是模板,因此避免了模板膨胀。

在CRTP中,基础是模板式的抽象(但不是多态的)。它指定了一个只有部分实现的接口,static_cast本身就是派生类型,因此覆盖了与真实抽象类中virtual函数类似的概念基础。

在此模式中,您有一个具体的基类和一个具体的派生类。没有什么是抽象的,所以概念更清晰。