当我尝试编译下面的代码时,我收到以下错误。 我原以为函数模板会自动推断出这些类的参数类型,但这种情况并没有发生 此代码不会复制,因此我将类型显式化。
我在这个过程中没有考虑/错过什么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;
};
答案 0 :(得分:1)