0

当我尝试编译下面的代码时收到以下错误。我期望函数模板会自动推断这些类的参数类型,但这没有发生 当我明确类型时,此代码也不会复制。

在这个过程中我没有考虑/错过什么 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;
};
4

1 回答 1

1

问题在这里:

typename F::return_type

应该:

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

例如,请参见此处

于 2013-03-16T13:42:27.943 回答