sigc::mem_fun 并从 class 方法传递参数
sigc::mem_fun and pass params from a class method
在 gtkmm 中,我可以在构造函数中使用类似这样的东西:
// Gtk::ImageMenuItem *iQuit;
iQuit->signal_activate().connect (sigc::mem_fun (*this, &FormUI::on_quit_activated) );
但我想使用一种方法来设置项目的属性,例如:
void FormUI::SetItemProps (Gtk::ImageMenuItem *i, const Glib::ustring& _l, ?what should I put here?)
{
i->set_use_stock (true);
i->set_label (_l);
i->signal_activate().connect (sigc::mem_fun (*this, ???) ); <-- what to pass there
}
所以我可以在构造函数中使用这样的东西:
SetItemProps (iQuit, "gtk-quit", &FormUI::on_quit_activated);
有什么想法吗?
您可能想使用 sigc::bind():
https://developer.gnome.org/gtkmm-tutorial/unstable/sec-binding-extra-arguments.html.en
您可能喜欢使用 typedef:
typedef void (FormUI::*function_ptr)();
void FormUI::SetItemProps (Gtk::ImageMenuItem *i, const Glib::ustring& _l, function_ptr fun)
{
i->set_use_stock (true);
i->set_label (_l);
i->signal_activate().connect (sigc::mem_fun (*this, fun) );
}
并且方法 on_quit_activated() 必须与声明的类型相同。
要调用,请使用
SetItemProps (iQuit, "gtk-quit", &FormUI::on_quit_activated);
在 gtkmm 中,我可以在构造函数中使用类似这样的东西:
// Gtk::ImageMenuItem *iQuit;
iQuit->signal_activate().connect (sigc::mem_fun (*this, &FormUI::on_quit_activated) );
但我想使用一种方法来设置项目的属性,例如:
void FormUI::SetItemProps (Gtk::ImageMenuItem *i, const Glib::ustring& _l, ?what should I put here?)
{
i->set_use_stock (true);
i->set_label (_l);
i->signal_activate().connect (sigc::mem_fun (*this, ???) ); <-- what to pass there
}
所以我可以在构造函数中使用这样的东西:
SetItemProps (iQuit, "gtk-quit", &FormUI::on_quit_activated);
有什么想法吗?
您可能想使用 sigc::bind(): https://developer.gnome.org/gtkmm-tutorial/unstable/sec-binding-extra-arguments.html.en
您可能喜欢使用 typedef:
typedef void (FormUI::*function_ptr)();
void FormUI::SetItemProps (Gtk::ImageMenuItem *i, const Glib::ustring& _l, function_ptr fun)
{
i->set_use_stock (true);
i->set_label (_l);
i->signal_activate().connect (sigc::mem_fun (*this, fun) );
}
并且方法 on_quit_activated() 必须与声明的类型相同。
要调用,请使用
SetItemProps (iQuit, "gtk-quit", &FormUI::on_quit_activated);