【发布时间】:2013-02-12 11:22:26
【问题描述】:
看起来像这样组合我的对象的好策略(作为策略):
template<typename FluxType, typename SourceType>
class Model : public FluxType, public SourceType
{ };
//later in the code:
template<typename FluxType, typename SourceType>
class ConcreteModel : public Model<FluxType, SourceType>
{};
但是,FluxType 和 SourceType 是使用相同数据的类。所以我使用了虚拟继承:
class ConcreteModelProps{};
class ConcreteFlux : virtual public ConcreteModelProps
{};
class ConcreteFlux2 : virtual public ConcreteModelProps
{/*sligthly different implementation*/};
class ConcreteSource : virtual public ConcreteModelProps
{};
class DefaultSource2
{/*no need for data*/};
这样我就可以用不同的FluxType 和SourceType 对象组成我的ConcreteModel。
ConcreteModel<ConcreteFlux, DefaultSource2> /*or whatever*/.
事实上,ConcreteModelProps 中定义的数据与ConcreteModel 密切相关。在我看来,我至少做错了什么。我怎样才能使这个设计更好?最好没有虚拟继承?
谢谢,dodol
【问题讨论】:
-
顺便说一句,为什么Smurf Naming?
-
CRTP pattern 可能对您的情况有所帮助,因此您可以混合各种实现而不需要虚拟继承。
-
您没有实现虚拟继承。编译器会这样做。您使用了虚拟继承。
-
@PeteBecker thx,已更正
标签: c++ templates multiple-inheritance