参数推导在模板函数中失败

时间:2013-03-16 13:40:20

标签: c++ templates

当我尝试编译下面的代码时,我收到以下错误。 我原以为函数模板会自动推断出这些类的参数类型,但这种情况并没有发生 此代码不会复制,因此我将类型显式化。

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

1 个答案:

答案 0 :(得分:1)

问题在于:

typename F::return_type

应该是:

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

例如,请参阅here