4

我正在用 C++ 制作一个运行健身俱乐部模拟的应用程序。用户只需在开始时输入模拟数据(3 个整数值)并按下运行。之后没有用户输入 - 非常简单。

开始模拟后,很多逻辑都深入到较低的类中,但其中很多需要将简单的输出消息打印到 UI。无法返回消息,因为对象需要打印到 UI 但要继续工作。

我打算将对 UI 对象的引用传递给所有需要它的类,但我最终将它传递了很多——一定有更好的方法。

我真正需要的是可以使调用 UI 的 printOutput(string) 函数比 cout << string;

UI 还有一个 displayConnectionStatus(bool[] connections) 方法。

请记住,UI 继承了一个抽象的“UserInterface”类,因此可以轻松地更改简单的控制台 UI 和 GUI。

你如何建议我实现这个到 UI 的链接?

如果我要使用全局函数,如何将其重定向到调用我选择使用的 UserInterface 实现的方法?

4

2 回答 2

4

不要害怕全局变量。

全局对象会损害封装,但对于不考虑立即可重用性的有针对性的解决方案,全局对象就可以了。

公开一个处理模拟事件的全局对象。然后,您可以选择打印事件、通过电子邮件发送、使用 OpenGL 或任何您喜欢的方式渲染它们。制作一个统一的接口,通过报告回调捕捉模拟内部发生的事情,然后您可以子类化这个全局对象以满足您的需求。

如果该对象不是全局的,您将在所有代码库中传递一个指针。

于 2013-03-01T18:18:35.780 回答
0

我建议使用日志框架,即您自己的类 LogMessages,它具有获取数据和记录数据的功能,它可以是 UI、文件、网络或任何东西。

每个需要记录的类都可以使用你的记录类。

这样您就可以避免全局变量和通用解决方案,还可以查看http://www.pantheios.org/这是开源 C/C++ 诊断日志 API 库,您也可以使用它...

于 2013-03-01T18:26:12.723 回答