模糊重载调用'创建'(但不是'食物')

时间:2014-03-01 18:42:32

标签: delphi delphi-5

我有一个带有两个类函数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;

无法编译:

  

对'Create'

的不明确的重载调用

为什么非模棱两可的呼唤变得暧昧?我希望这不是一件武断的事情。

你为什么这样做?

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

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

2 个答案:

答案 0 :(得分:2)

我认为模糊性与TObject中声明的具有相同参数的构造函数有关。

然而,在现代版本的Delphi中,代码编译。我认为这是正确的,因为TObject构造函数未标记为overload。所以这感觉就像是Delphi 5编译器的bug。

答案 1 :(得分:1)

试试这个:

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

(或者可能转换过载;并重新引入;修饰符)