混合使用 C 和 C++ API

你可以使用那些尚未提供 C++ 接口的 C API。对于 C++ 而言这一般不是什么问题,gtkmm 可以提供帮助访问底层的 C 对象,并且也提供了一个简单的方式来从一个 C 对象创建一个 C++ 封装的对象,当然,这个 C API 是需要基于 GObject 系统的。

要用 C 函数使用一个 gtkmm 实例需要一个 C GObject 实例,使用 gobj() 函数可以得到一个底层 GObject 实例的指针。例如

Gtk::Button* button = new Gtk::Button("example");
gtk_button_do_something_new(button->gobj());

要从 C GObject 实例得到一个 gtkmm 实例,则使用 Glib::wrap() 函数。例如

GtkButton* cbutton = get_a_button();
Gtk::Button* button = Glib::wrap(cbutton);