c++ - 如何结合模板方法模式和多重继承?

标签 c++ inheritance design-patterns template-method-pattern

我可以更改此代码以使其工作吗?是否可以结合模板方法模式和多重继承?在不同的类中实现不同的算法似乎很方便。谢谢。

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
{};

最佳答案

从根本上说,您的问题是 TFirstAlgorithm::Do1TBase::Do1 无关(同样 TSecondAlgorithm::Do2TBase::Do2

解决这个问题的一种可能方法是使它们相关:

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
{};

关于c++ - 如何结合模板方法模式和多重继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10956107/

相关文章:

java - java执行器服务是命令设计模式的实现吗?

c++ - 针对 boost 系统的 bjam 链接

c++ - C++ regex_replace 中的后缀 ($´) 不起作用

c# - 避免嵌套 try catch block 的模式?

python - 我怎样才能强制子类有 __slots__?

python - 在字段中添加 "UOM"(测量单位) - OpenErp

c++ - 通过 BOOST_FOREACH 使我的 C++ 类可迭代

c# - msgpack 可以在 C# 中打包用户定义的对象,将包发送到 C++ 应用程序,然后在其中解包吗?

c++ - C++ 中的字符串到字节或 Char*

c# - 当 "sealed"是可选的时,C# 中 "virtual"的用途是什么?