gtkmm

gtkmm 是一个 GTK 的 C++ 封装,GTK+ 是一个用于创建图形用户界面的软件库。它使用 LGPL 协议,因此您可以使用 gtkmm 开发开放软件、自由软件,甚至商业非免费软件而不需支付任何版权费用。

gtkmm 曾经被称为 gtk--,那是因为 GTK+ 的名字中已经有了一个加号。但是,由于 -- 不容易被搜索引擎索引,所以项目名字就渐渐的变成了gtkmm,后来我们就一直使用这个名字。

1.2.1. 为什么要使用 gtkmm 而不是 GTK?

gtkmm 允许你使用常用的 C++ 技术来撰写代码,比如封装、继承和多态。作为一个 C++ 程序员,你可能已经意识到这会让代码更加清晰、更加良好的管理代码。

gtkmm 更加类型安全,因此编译器可以检测出一些 C 只能在运行时才能检测出来的错误。这种使用特定类型的方法同样使得 API 更加清晰,因为你只需要通过看一下函数声明就可以知道应该使用什么类型了。

可以使用继承来衍生新的部件。在 GTK 中使用 C 代码来衍生新部件是非常复杂的,并且很容易出错,因此几乎没有 C 的程序员这么做。作为 C++ 开发人员,你知道继承是一个基本的面向对象技术。

可以使用成员实例,简化了内存管理。所有的 GTK 的 C 部件都是使用指针进行操作的。作为 C++ 程序员,你知道指针应当尽量避免使用。

gtkmm 比 GTK 的代码更加简短,GTK 使用了大量带前缀的函数名以及大量的转型宏。

1.2.2. gtkmm 对比 Qt

Trolltech 公司的 Qt 是和 gtkmm 最相似的有竞争力的产品,所以应该对其进行一下讨论。

gtkmm 开发人员更倾向于使用 gtkmm 而不是 Qt,因为 gtkmm 的使用更加符合 C++ 的方式。Qt 是诞生自 C++ 及其库尚未标准化或尚未被大多数编译器所支持的年代。它重复了大量的现存于标准库中的东西,比如容器、类型信息等等。最重要的是,Trolltech 修改了 C++ 语言以提供信号的功能,这样 Qt 的类无法很容易的与非 Qt 类共同使用。gtkmm 则可以使用标准 C++ 提供信号功能,而无需修改 C++ 语言。请看常见问题以了解具体差异。

1.2.3. gtkmm 是一个封装

gtkmm 并不是一个原生的 C++ 工具集,而是一个对于 C 工具集的 C++ 封装。这种分离接口和实现的方式存在诸多优势。gtkmm 开发人员用了他们大量的时间来讨论如何让 gtkmm 提供一个最清晰的 API,而不必为模糊的技术细节尴尬的进行妥协。我们想其他的 C 程序员、Perl 程序员和 Python 程序员等等一样,对底层的 GTK 代码库进行了一点点贡献。因此,GTK 可以从比某个语言特定的工具集更广泛的用户群中获得好处,有更多的实现、更多的开发人员、更多的测试人员以及更多的用户。