3
我需要覆盖boost::signals2::signal
和boost::function
之间的连接。 为此,我创建了下面的模板功能:C++模板参数扣除不起作用
template<typename T>
void bind(boost::signals2::signal<T> &signal, boost::function<T> function) {
// override code ...
}
我想利用这个bind
的那样简单,因为它可以。 从我在类似问题的帖子中读到的内容,模板参数应该从函数参数中推导出来。 但在我的情况下,当没有明确的参数它不起作用。
boost::signals2::signal<void()> my_signal;
bind<void()>(my_signal, boost::bind(&A::func, this)); // this works
bind(my_signal, boost::bind(&A::func, this)); // error: no matching function for call
我错过了什么吗?是否有任何解决方法可避免显式模板参数?
什么是my_signal声明? – ildjarn 2012-07-06 22:04:56
@ildjarn对不起,我应该把它放在那里。它是'boost :: signals2 :: signal my_signal;' –
Maros
2012-07-07 10:09:23
模板参数扣除发生在任何转换之前。第二个电话没有完全匹配。 Boost :: bind提供了一些可以转换为第二个参数的东西,但是这只能在模板参数推导之后发生。因此你需要明确的呼叫。或者你可以使整个第二个参数成为一个模板 – 2012-07-07 10:33:45