libsigc 是如何包含在 gtkmm 项目中的

How is libsigc included in gtkmm projects?

本文关键字:项目 gtkmm 何包含 libsigc      更新时间:2023-10-16

在gtkmm教程hello world示例中,libsigc++库用于helloword.cc文件:

#include "helloworld.h"
#include <iostream>
HelloWorld::HelloWorld()
: m_button("Hello World")   // creates a new button with label "Hello World".
{
    // Sets the border width of the window.
    set_border_width(10);
    // When the button receives the "clicked" signal, it will call the
    // on_button_clicked() method defined below.
    m_button.signal_clicked().connect(sigc::mem_fun(*this,
                &HelloWorld::on_button_clicked));
    // This packs the button into the Window (a container).
    add(m_button);
    // The final step is to display this newly created widget...
    m_button.show();
}

但是,libsigc++永远不会包含在此文件中,但这仍然可以正常工作。sigc命名空间从何而来?

编辑: helloworld.h

#ifndef GTKMM_EXAMPLE_HELLOWORLD_H
#define GTKMM_EXAMPLE_HELLOWORLD_H
#include <gtkmm/button.h>
#include <gtkmm/window.h>
class HelloWorld : public Gtk::Window
{
  public:
    HelloWorld();
    virtual ~HelloWorld();
  protected:
    //Signal handlers:
    void on_button_clicked();
    //Member widgets:
    Gtk::Button m_button;
};
#endif // GTKMM_EXAMPLE_HELLOWORLD_H

查看 "gtkmm/window.h" 的内容

http://fossies.org/unix/privat/gtkmm-3.6.0.tar.gz/dox/gtk_2gtkmm_2window_8h.html

它包括"SIGC++.h"

您可以在main.h中找到包含

http://git.gnome.org/browse/gtkmm/tree/gtk/src/main.hg#n22

包含在gtkmm.h

http://git.gnome.org/browse/gtkmm/tree/gtk/gtkmm.h#n181