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