排序可视化——如何解决循环依赖?

Gh0*_*0st 2 c++

我正在编写排序可视化。我希望它在算法运行时处理事件和更新屏幕。我有一个具有 SortContext 属性的 Controller 类。我希望 SortContext 的排序方法引用控制器,以便它可以使用方法updateisAppRunning但出现错误:

控制器尚未声明

我怎样才能让它工作?

控制器.hpp

class Controller {

private:
  SortContext context;
  View view;
  std::vector<Sortable> data;

  bool algorithmRunning = false;

  void handleEvents();

public:
  Controller();
  void update();
  bool isAppRunning();
};
Run Code Online (Sandbox Code Playgroud)

排序上下文.hpp

class SortContext {

private:
  std::unique_ptr<SortStrategy> strategy;
  static const std::vector<std::function<std::unique_ptr<SortStrategy>(void)>> algorithms;

public:
  void chooseStrategy(int algorithmId);
  void sort(std::vector<Sortable> &data, Controller &controller);
};
Run Code Online (Sandbox Code Playgroud)

ana*_*ciu 6

ControllerSortContext.hpp 中转发声明类并在 Controller.hpp 中包含SortContext.hpp

#include "SortContext.hpp"

class Controller {

private:
  SortContext context;
  View view;
  std::vector<Sortable> data;

  bool algorithmRunning = false;

  void handleEvents();

public:
  Controller();
  void update();
  bool isAppRunning();
};
Run Code Online (Sandbox Code Playgroud)
class Controller;

class SortContext {

private:
  std::unique_ptr<SortStrategy> strategy;
  static const std::vector<std::function<std::unique_ptr<SortStrategy>(void)>> algorithms;

public:
  void chooseStrategy(int algorithmId);
  void sort(std::vector<Sortable> &data, Controller &controller);
};
Run Code Online (Sandbox Code Playgroud)

不要在包含Controller.hpp 的地方包含SortContext.hpp,否则会出现重新定义错误:

#include "Controller.hpp"

int main()
{
    // use your classes
}
Run Code Online (Sandbox Code Playgroud)

在这里你可以看到一个现场演示