【发布时间】:2018-11-02 23:40:15
【问题描述】:
假设我有一个大类层次结构作为单根树,根为class A,这样它的每个后代都有自己的void f(...) 和void g(...) 实现,具有不同的参数列表。
我有另一个类class X: public A,它只在一些方法中使用基类f(...) 和g(...)。现在我想将X 中的方法扩展到A 的所有子类型:假设A 的子类型为B,新类为class BX。要求是:
- (实现)
class BX应该使用来自class B的f(...)和g(...),以及来自class X的所有方法。 - (接口)
class BX应遵循class A的接口。
我想出的解决方案是有template<typename B> class BX: public B来避免1中的钻石问题。
有没有更好的方法来实现我想要的?
【问题讨论】:
-
我不清楚你所说的“不同的参数列表”是什么意思;你的意思是他们都超载和覆盖 f 和 g?
-
是的,它们都重载并覆盖了 f() 和 g()。
-
重载几乎无关紧要。具有相同名称和不同参数的函数只是不相关的函数。
标签: c++ class templates constructor diamond-problem