std::function 无法推断模板实例中的重载类型
std::function cannot deduce overloaded type in template instance
我有这个相当简单的模板 class :
template <typename Value>
struct Foo {
typedef Value ValueType;
Value array[3];
};
现在我试图从一个简单的函数中获取函数对象 (std::function
),使用依赖类型 F
作为函数参数和 return 类型。
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>
如何告诉编译器在那种情况下需要使用重载?
添加演员:
std::function<Value(Value)>(static_cast<Value(&)(Value)>(std::floor))
std::floor
被重载,而 std::function
的构造函数是一个模板,所以没有明显的重载选择,你必须明确指定它,你可以用强制转换来完成。
我有这个相当简单的模板 class :
template <typename Value>
struct Foo {
typedef Value ValueType;
Value array[3];
};
现在我试图从一个简单的函数中获取函数对象 (std::function
),使用依赖类型 F
作为函数参数和 return 类型。
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>
如何告诉编译器在那种情况下需要使用重载?
添加演员:
std::function<Value(Value)>(static_cast<Value(&)(Value)>(std::floor))
std::floor
被重载,而 std::function
的构造函数是一个模板,所以没有明显的重载选择,你必须明确指定它,你可以用强制转换来完成。