gpt4 book ai didi

delphi - 对 'Create` 的不明确重载调用(但不是 'Foo' )

转载 作者:行者123 更新时间:2023-12-03 15:54:40 24 4
gpt4 key购买 nike

我有一个带有两个类函数 Foo 的示例类。一个接受争论,另一个不接受:

TContoso = class
class function Foo: IUnknown; overload;
class function Foo(bar: IUnknown): IUnknown; overload;
end;

我可以毫无意外地调用我的静态函数:

unk := TContoso.Foo;

但是如果这些方法被命名为我想要的名称:

TContoso = class
class function Create: IUnknown; overload;
class function Create(bar: IUnknown): IUnknown; overload;
end;

然后调用同一个类方法:

unk := TContoso.Create;

编译失败:

Ambiguous overload call to 'Create'

为什么非二义性调用是二义性的?我希望这不是随意的事情。

你为什么要这么做?

这对问题并不重要,但如果我们忽略问题并专注于我所处的情况,有些人会认识到这种模式:

CoXmlWriter = class
class function Create: IXmlWriter; overload;
class function Create(const stream: ISequentialStream): IXmlWriter; overload;
end;

最佳答案

我认为歧义在于 TObject 中声明的具有相同参数的构造函数。

但是,在现代版本的 Delphi 中,代码可以编译。我认为这是正确的,因为 TObject 构造函数没有标记 overload。所以这感觉像是一个 Delphi 5 编译器错误。

关于delphi - 对 'Create` 的不明确重载调用(但不是 'Foo' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22118683/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com