How to combine pattern template pattern and multiple inheritance?

Can I change this code to make it work? Is it possible to combine pattern template pattern and multiple inheritance? It seems very convenient to implement different algorithms in different classes. Thanks.

class TBase { public: virtual void Do1() const = 0; virtual void Do2() const = 0; void Do() const { Do1(); Do2(); } }; class TFirstAlgorithm { public: void Do1() const {} }; class TSecondAlgorithm { public: void Do2() const {} }; class TAlgorithm : public TBase , public TFirstAlgorithm , public TSecondAlgorithm {}; 
+4
source share
2 answers

Essentially, your problem is that TFirstAlgorith::Do1 does not apply to TBase::Do1 (and also from TSecondAlgorithm::Do2 to TBase::Do2 .

One possible way to fix this is to link them:

 class TBase { public: virtual void Do1() const = 0; virtual void Do2() const = 0; void Do() const { Do1(); Do2(); } }; class TFirstAlgorithm : public virtual TBase { public: void Do1() const { } }; class TSecondAlgorithm : public virtual TBase { public: void Do2() const { } }; class TAlgorithm : public TFirstAlgorithm , public TSecondAlgorithm {}; 
+3
source

You can use implementations for Do1 and Do2 and call the corresponding algorithm inside them.

  class TBase { public: virtual void Do1() const = 0; virtual void Do2() const = 0; void Do() const { Do1(); Do2(); } }; class TFirstAlgorithm { public: void Do1() const {} }; class TSecondAlgorithm { public: void Do2() const {} }; class TAlgorithm : public TBase , public TFirstAlgorithm , public TSecondAlgorithm { virtual void Do1() const { TFirstAlgorithm::Do1() ; } virtual void Do2() const { TSecondAlgorithm::Do2() ; } }; 
0
source

All Articles