是否可以在没有动态多态性的情况下在 C++ 中实现状态设计模式?

Is it possible to implement the state design pattern in C++ without dynamic polymorphism?

假设我有以下 C++ 代码

class ControlAlgorithm {

public:
    virtual void update() = 0;
    virtual void enable() = 0;
    virtual void disable() = 0;
};

class Algorithm_A : public ControlAlgorithm {

public:
    void update();
    void enable();
    void disable();
};

class Algorithm_B : public ControlAlgorithm {

public:
    void update();
    void enable();
    void disable();
};

Algorithm_A algorithm_A;
Algorithm_B algorithm_B;
ControlAlgorithm *algorithm;

假设我想在 运行 期间根据一些外部事件在 algorithm_Aalgorithm_B 之间切换(基本上我将实施状态设计模式) .所以 algorithm 指针指向 algorithm_Aalgorithm_B 对象。我的问题是是否有任何方法如何在 运行 时间内实现在算法之间动态切换的能力,而无需虚拟方法 通用接口,例如奇怪的重复模板模式?

您可以使用 composition over inheritance。例如,如下所示。

#include <iostream>
#include <functional>

struct control_algorithm {
    const std::function<void()> update;
    const std::function<void()> enable;
    const std::function<void()> edit;
};

control_algorithm make_algorithm_A() {
    return {
        []() { std::cout << "update A\n"; },
        []() { std::cout << "enable A\n"; },
        []() { std::cout << "edit A\n"; },
    };
}

control_algorithm make_algorithm_B() {
    return {
        []() { std::cout << "update B\n"; },
        []() { std::cout << "enable B\n"; },
        []() { std::cout << "edit B\n"; },
    };
}

int main()
{
    auto algorithm_A = make_algorithm_A();
    auto algorithm_B = make_algorithm_B();
    auto control = algorithm_A;
    //auto control = algorithm_B;
}