2

我是一个初学者,我已经用 C++ 编写了一个 10000 行的程序,它主要使用全局函数和 void 函数。

无论如何,我的程序没有 GUI,所以我正在使用 Clutter 为它制作一个。因此,在混乱中,您使用信号处理函数来连接按钮点击、运动事件等。

信号处理函数只能接受一个用户数据参数。然而,GUI 的许多组件,数百个需要由不同的功能访问。所以我将我所有的 GUI 对象放在一个结构中,并从每个信号处理函数中传递它。

所以我现在的程序(控制台程序)打印了一些字母来做某事。如果你按下那个字母,启动某个功能。如果我不使用全局变量,我需要将其中一些变量作为参数传递。

如果我直接将我的代码插入到 GUI 中,那么信号处理函数将启动适当的函数,但只能传递一个用户数据参数,现在它已经被用作具有数百个 GUI 成员的结构。

对不起,如果这一切听起来很疯狂。我只是想重新编写我的代码以使用更好的实践,但是对于 10000 长的代码,以及我对某些事情缺乏了解,我感到非常不知所措。

我只是在寻找一些关于从哪里开始以及如何处理我在连接到 GUI 时遇到的问题的建议。

对于我关于结构的问题。我有兴趣知道结构内是否有最大数量的元素。如果结构中有一个数组,该数组的访问时间会变慢吗?结构的内存处理方式是否存在差异。

谢谢。

4

2 回答 2

1

我认为您的问题有一个隐藏的问题:如何编写 GUI 应用程序/框架?

从我快速搜索的内容来看,杂乱似乎非常低。如果你想跳过很多编码,只需使用 Qt Framework 之类的东西,它也使用 OpenGL(或 GTK+,取决于你想要什么样的许可证)呈现大多数东西。

如果您想或多或少地从头开始编写它,没有简单的答案,我将尝试在一个非常高的层次上复习它,并强调它通常是如何工作的非常非常基本的想法。

由于您使用 C++ 标签对其进行了标记,因此正确的 C++ 方法是使用类。

您将拥有诸如声音 (MP3) 之类的类,以及诸如解码、编码等方法。然后您将拥有用于 GUI 元素的类,以及诸如 onPaint、onClick 等方法。

假设你想要一个按钮。它将是一个具有变量的类,例如 x、y、宽度、高度、文本、clickHandler、启用等。它会有一些低级别的事件处理程序,例如 onPaint、onClick(这个会检查鼠标是否在按钮上以及它是否已启用,如果所有这些检查都通过,它将调用 clickHandler)。它可能还有一些方法,如 isEnabled()、disable()、enable() 等。

现在您可以随意创建任意数量的按钮实例,每个实例都有自己的状态(启用或禁用、文本、宽度、高度,所有这些)。您将为每个按钮设置一个 clickHandler。

会有一些全局变量,但大多数内部内容都在类中。如果您有某种层次结构,例如一个窗口有很多按钮,那么您的 Window 类将只有一个按钮列表。并且不要忘记每个类都应该在一个新文件中,除非有多个非常密切相关。

但实际上你不想写任何这样的东西,因为已经有大量的图书馆在做。

至于如何将它们粘合在一起,您可能希望遵循您选择的特定框架使用的约定。如果您在 Windows 上并且想要制作仅限 Windows 的应用程序,请使用 WPF(或 Winforms)。Qt 非常适合跨平台的东西,而且它非常现代,但是如果您正在制作商业应用程序,许可证会有点限制。

于 2012-02-04T23:43:06.897 回答
0

访问结构内的元素总是会因为执行额外引用的成本而变慢,因此需要额外读取 RAM。尝试将对象分组到structs 中,以便将它们一起使用,以便这些内存请求可以缓存在更快的 RAM/板载缓存中。

结构成员并没有真正的限制,当您超过函数应采用的最大参数数量时,它们通常很有用,我被教导(在 2002 年)幻数是 7。

最终,当将成员分组到structs 中时,您应该能够识别哪些函数使用它们,而不是传递结构,您可以使函数成为成员,并且不必取消引用结构以获取该参数的成员。我认为此时您可能可以授予structs 等效的 C++ 标签,class.

于 2012-02-04T22:56:18.327 回答