函数重载歧义使用 - Xcode 12.5

Posted

技术标签:

【中文标题】函数重载歧义使用 - Xcode 12.5【英文标题】:Function overloading ambiguous use - Xcode 12.5 【发布时间】:2021-05-11 14:33:40 【问题描述】:

当我定义枚举时:

enum Test: CGFloat 
    case zero

还有两个类似下面的函数:

func test(_ param: CGFloat)  
    print("param - \(param)") 


func test(_ param: Test)  
    print("param - \(param.rawValue)") 

当我尝试使用它们时出现问题:

test(Test.zero) <- prints "param - 0"
test(.zero) <- error: ambiguous use of .zero

虽然我了解编译器与 .zero 的两个定义发生冲突,但我试图确定它在 Xcode 12.5 的发行说明中的​​更改位置。也许有人可以指出我正确的方向?它似乎在 12.4 中工作。

注意:

可以通过以下方式修复:

更好的 API 设计; 按照以下conversation 使用@_disfavoredOverload

【问题讨论】:

谢谢@hoseinalialborzi,但您发布的问题似乎与返回类型有关。我的问题是关于发行说明的。 【参考方案1】:

可能是

的次要结果

隐式成员表达式现在支持成员访问链。 (57295228)

您可能会因为现有代码损坏而提交错误,但它有一种边缘情况的感觉,所以也许它永远不应该工作。无论如何,我敢打赌Test.zero 会加快编译速度。正如您的论坛链接所示,这种类型检查很复杂。

【讨论】:

此外,类型检查器也在不断发展,不需要在发行说明中添加特定条目。

以上是关于函数重载歧义使用 - Xcode 12.5的主要内容,如果未能解决你的问题,请参考以下文章

对重载可变参数模板函数的歧义调用

Java8:与 lambdas 和重载方法的歧义

Armadillo / Xcode:“仅返回类型不同的函数不能被重载”错误无处不在

如果我在 Scala 中定义多个重载构造函数,我不能定义默认值吗?

java中重载覆盖和隐藏三者的区别分析

可以显式默认/删除的函数在 ref 限定符上重载吗?