我有一些回调函数:编译错误与模板的功能结合到一个gtkmm的信号
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));
有人可以告诉我我搞砸了吗?
你有完全一样的问题,因为[他](http://stackoverflow.com/questions/32016749/forwarding-arguments-to-template-member-function)(尽管它是一个不同的用法),你可以通过明确地告诉编译器你想使用哪个'someCB2'来解决这个问题(我的意思是,哪种类型)[编辑:另外,我有你想要的感觉使用模板来实现动态多态,这将无法正常工作,使用虚拟方法] – Caninonos
@Caninonos actualy我不明白我怎么能告诉这种类型选择(我所有的尝试失败) –
@Caninonos thx为您的参与 –