std::function 模板参数签名中的歧义
当两个 function
为了说明这一点,请考虑以下类:
<code class="cpp">template<class Signature> class myfunc{ public: template<class Func> myfunc(Func a_func){ // ... } };</code>
当编译器尝试为重载集找到可行的函数时,它会搜索潜在的转换。在这种情况下,myfunc 的两个构造函数都接受任何内容,允许从 int(*)() 到 myfunc
因此,当调用 a(x) 或 a(y) 时,编译器会遇到两个可行的函数,从而导致歧义。
解决方法
声明和定义函数时,std::function 的模板参数签名是其类型的一部分。然而,在对象构造期间,签名被忽略。
为了避免歧义,可以:
以上是为什么 `std::function` 会导致模板参数签名不明确?的详细内容。更多信息请关注PHP中文网其他相关文章!