2013-03-16 82 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