std :: function无法推断模板实例中的重载类型

时间:2015-07-11 15:02:30

标签: c++ c++11 std-function

我有这个相当简单的模板类:

template <typename Value>
struct Foo {
    typedef Value ValueType;
    Value array[3];
};

现在我试图从一个简单的函数中获取一个函数对象(std::function),使用依赖类型F作为函数参数和返回类型。

template <typename F>
void floorfunc( const F& foo) {
    typedef typename F::ValueType Value;
    auto fptr = std::function<Value(Value)>(std::floor);
}

编译器正确地设置Value类型,但无法猜出floor的正确函数重载,并向我发送此错误消息

error: no matching function for call to 'std::function<float(float)>::function(<unresolved overloaded function type>

在这种情况下,如何告诉编译器需要使用过载?

1 个答案:

答案 0 :(得分:1)

添加演员:

std::function<Value(Value)>(static_cast<Value(&)(Value)>(std::floor))

std::floor被重载了,std::function的构造函数是一个模板,因此没有明显的重载选择,你必须明确指定它,你可以使用强制转换

相关问题