函数不能在模板实例中推导出重载类型
std::function cannot deduce overloaded type in template instance
我有一个相当简单的模板类:
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>
我如何告诉编译器在这种情况下需要使用重载?
添加cast:
std::function<Value(Value)>(static_cast<Value(&)(Value)>(std::floor))
std::floor
是重载的,而std::function
的构造函数是一个模板,因此没有明显的重载选择,您必须显式指定它,这可以通过强制转换来实现。
相关文章:
- 从父命名空间重载类型
- 如何确保接受的C++模板类型使运算符重载?
- 模板化类如何解析在其类型之一上调用的重载非成员函数?
- 错误:表达式必须具有算术、无作用域枚举或带有运算符重载的指针类型
- 泛型枚举和其他类型的重载模板函数
- 避免在人为的重载函数调用中拼写出类型
- 为什么重载运算符可以返回其返回类型以外的其他内容?
- 为什么在传递长整型时调用具有两个双精度类型的参数的重载函数?
- 重载模板函数未为特定类型选择正确的版本
- 如何为流输出运算符提供重载<<模板'using'类型别名?
- MSVC 错误:4 个重载中的任何一个都无法转换所有参数类型
- 具有重载类型转换运算符的函数对象崩溃
- 为什么在指定重载类型的返回值时出现编译错误
- 忽略C++重载类型转换运算符
- 重载 C++ 类型以处理自定义类
- 重载类型强制转换运算符,以强制转换为指向函数的指针
- C++中的一元运算符重载类型(新手)
- 函数不能在模板实例中推导出重载类型
- 重载类型转换运算符的语法
- 重载 C++ 类型转换(函数)