尽管定义了类型,Std::Function 的模板参数中仍存在歧义
在这种情况下,函数“a”存在多个重载,每个重载接受 std::function:
的不同签名由于两个 function
template<class _Fx> function(_Fx _Func, typename _Not_integral<!...int>::_Type = 0);
本质上,任何对象都可以转换为 std::function,从而促进类型擦除并能够处理任意对象作为函数。
为了进一步说明问题,请考虑以下简化示例:
template<class Signature> class myfunc{ public: template<class Func> myfunc(Func a_func){ // ... } };
在 'a' 的重载解析期间,如果无法识别可行的重载,编译器将尝试使用参数的构造函数或参数的转换运算符来转换参数。在这种情况下,转换是通过 myfunc 的构造函数进行的。
由于 myfunc 的构造函数接受任何内容,因此两个 function
最终,这会导致编译器无法确定要调用 'a' 的哪个重载,从而导致歧义。
To解决这个问题,你有几个选择:
以上是为什么'std::function”的模板参数会导致重载解析中的歧义?的详细内容。更多信息请关注PHP中文网其他相关文章!