C++ sigc::mem_fun并从类方法传递参数

C++ sigc::mem_fun并从类方法传递参数,c++,class,methods,gtkmm,libsigc++,C++,Class,Methods,Gtkmm,Libsigc++,在gtkmm中,我可以在构造函数中使用如下内容: // Gtk::ImageMenuItem *iQuit; iQuit->signal_activate().connect (sigc::mem_fun (*this, &FormUI::on_quit_activated) ); SetItemProps (iQuit, "gtk-quit", &FormUI::on_quit_activated); SetItemProps (iQuit, "gtk-quit",

在gtkmm中,我可以在构造函数中使用如下内容:

// Gtk::ImageMenuItem *iQuit;
iQuit->signal_activate().connect (sigc::mem_fun (*this, &FormUI::on_quit_activated) );
SetItemProps (iQuit, "gtk-quit", &FormUI::on_quit_activated);
SetItemProps (iQuit, "gtk-quit", &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
}

有什么想法吗?

您可能想使用sigc::bind()

您可能喜欢使用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) );
}
并且_quit _activated()上的方法必须是声明的类型

打电话,使用