4

このコードを変更して機能させることはできますか?テンプレートメソッドパターンと多重継承を組み合わせることは可能ですか?さまざまなクラスにさまざまなアルゴリズムを実装すると非常に便利なようです。ありがとうございました。

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

2 に答える 2

3

基本的に、あなたの問題は、TFirstAlgorith::Do1(TBase::Do1と同様TSecondAlgorithm::Do2TBase::Do2.

それを修正する1つの可能な方法は、それらを関連させることです:

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
{};
于 2012-06-08T21:26:50.453 に答える
0

Do1 と Do2 の実装を使用して、それらの中で適切なアルゴリズムを呼び出すことができます。

 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() ; }  
};
于 2012-06-08T21:17:39.553 に答える