当我尝试编译下面的代码时收到以下错误。我期望函数模板会自动推断这些类的参数类型,但这没有发生 当我明确类型时,此代码也不会复制。
在这个过程中我没有考虑/错过什么 C++ 规则,解决方法是什么?
问候
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;
};