我有这个相当简单的模板类:
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>
在这种情况下,如何告诉编译器需要使用过载?
答案 0 :(得分:1)
添加演员:
std::function<Value(Value)>(static_cast<Value(&)(Value)>(std::floor))
std::floor
被重载了,std::function
的构造函数是一个模板,因此没有明显的重载选择,你必须明确指定它,你可以使用强制转换