【发布时间】:2015-08-14 22:13:59
【问题描述】:
我有一些回调函数:
class someclass
{
private:
bool someCB1(GdkEventFocus*,GtkEntry*);
template<class T> bool someCB2(GdkEventFocus*,T*);
};
在someclass 的代码中的某处我有一个Gtk::Entry* entry。如果我连接someCB1:
entry->signal_focus_out_event().connect( sigc::bind<Gtk::Entry*>( sigc::mem_fun( this, &someclass::someCB1 ), entry ) );
这个可行,但就我而言,我想将someCB与不同类型的Gtk::Widget一起使用,所以我编写了模板函数someCB2
连接someCB2 我写了:
entry->signal_focus_out_event().connect( sigc::bind<Gtk::Entry*>( sigc::mem_fun( this, &someclass::someCB2 ), entry ) );
这一行在编译时失败,错误非常多(我无法将控制台滚动到第一个,但最后一个类似,所以我想和其余的一样)。这是最后一个:
/usr/include/sigc++-2.0/sigc++/functors/mem_fun.h:6356:1: note: template argument deduction/substitution failed:
/home/user/chicken.cc:158:111: note: couldn't deduce template parameter ‘T_arg1’
entry->signal_focus_out_event().connect( sigc::bind<Gtk::Entry*>( sigc::mem_fun( this, &someclass::someCB2 ), entry ) );
谁能告诉我我搞砸了什么?
【问题讨论】:
-
你有与him 完全相同的问题(尽管它的用法不同)你可以通过明确告诉编译器你想使用哪个
someCB2来解决这个问题(我的意思是,使用哪种类型) [编辑:另外,我感觉您正在尝试使用模板来实现动态多态性,这是行不通的,为此使用虚拟方法] -
@Caninonos 实际上我不知道如何判断要选择哪种类型(我所有的尝试都失败了)
-
@Caninonos 感谢您的参与
标签: c++ templates binding g++ gtkmm