2015-02-05 58 views
1

在gtkmm的我可以使用像这样的构造:sigc :: mem_fun和通PARAMS

// 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); 

任何想法吗?

回答

2

你可能喜欢在此使用的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); 
+0

感谢的人,是帮助:) – Joel 2015-02-15 01:42:34