1
似乎是一個很好的策略,撰寫我的對象是這樣的(如政策):如何避免虛擬繼承
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*/};
這樣,我可以譜寫我ConcreteModel
不同FluxType
和SourceType
對象。
ConcreteModel<ConcreteFlux, DefaultSource2> /*or whatever*/.
的事實是,在ConcreteModelProps
中定義的數據密切相關的ConcreteModel
。在我看來,我至少在做錯事。我怎樣才能使這個設計更好?最好沒有虛擬繼承? thx,dodol
順便說一句,爲什麼[Smurf命名](http://www.codinghorror.com/blog/2012/07/new-programming-jargon.html)? – Kos 2013-02-12 11:25:04
可能是[CRTP模式](http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern)可能有助於您的情況,因此您可以在不需要虛擬繼承的情況下混合使用各種實現。 – 2013-02-12 11:26:37
@Kos thx,已更改 – dodol 2013-02-12 11:28:00