2013-03-16 80 views
0

我在嘗試編譯下面的代碼時收到以下錯誤。 我期待的功能模板會自動推斷這些類的參數類型,但這不會發生 此代碼不會複製alsowhen我讓類型顯式。模板函數中的參數推演失敗

什麼C++規則我沒有考慮/在這個過程中missin和什麼是修復?

問候

AFG

error: no matching function for call to ‘wrap_call(test<ciccio>&, get_value&) 


template <typename T> 
struct test{  
    typedef T value_type; 
    T m_data; 
}; 

template<typename T,typename F> 
typename F::return_type wrap_call(T& obj ,F& f){ 
    return f.operator()(obj); 
} 

struct ciccio{ 
    int m_value; 
}; 

struct get_value 
: std::unary_function<test<ciccio>,ciccio*> 
{ 
    ciccio* operator()(test<ciccio>& obj){ 
     return &obj.m_data; 
    } 
}; 

int main(){ 
    test<ciccio> obj; 
    get_value g; 
    ciccio* p = (obj,g); 
    // same error if I make the types explicit 
    //ciccio* p = wrap_call<test<ciccio>,get_value>(obj,g); 
    return 0; 
}; 

回答

1

的問題是在這裏:

typename F::return_type 

應該是:

typename F::result_type 
//   ^^^^^^^^^^^ 

見,例如,here

+0

oooops! ..感謝安迪..我花了1小時就... – 2013-03-16 13:43:57

+0

@AbruzzoForteeGentile:沒問題,發生了:) – 2013-03-16 13:44:20

+0

@AbruzzoForteeGentile:如果這解決了你的問題,你能否考慮接受答案? – 2013-03-16 13:58:18