Moin!
Ich lasse mal den Quelltextauszug für sich sprechen:
Delphi-Quellcode:
interface
type
TIntBoolean =
record
strict private
FValue: Boolean;
public
property AsBoolean: Boolean
read FValue
write FValue;
class operator Implicit(AInteger: Integer): TIntBoolean;
class operator Implicit(AIntBoolean: TIntBoolean): Integer;
class operator Implicit(ABoolean: Boolean): TIntBoolean;
class operator Implicit(AIntBoolean: TIntBoolean): Boolean;
end;
implementation
class operator TIntBoolean.Implicit(
AInteger: Integer): TIntBoolean;
begin
Result.AsBoolean := (AInteger > 0);
end;
class operator TIntBoolean.Implicit(
ABoolean: Boolean): TIntBoolean;
begin
Result.AsBoolean := ABoolean;
end;
class operator TIntBoolean.Implicit(
AIntBoolean: TIntBoolean): Integer;
begin
Result := Integer(AIntBoolean.AsBoolean);
end;
class operator TIntBoolean.Implicit(
AIntBoolean: TIntBoolean): Boolean;
begin
Result := AIntBoolean.AsBoolean;
end;
{... andere Unit ...}
interface
function Produce(AParam: TIntBoolean = 1):
string;
// <-- E2268 Parameter dieses Typs dürfen keine Standardwerte haben
Warum bringt es der Compiler nicht hin, die implizite Integer-Zuweisung hier zu machen? Und besteht die Möglickeit, dies durch Änderungen an TIntBoolean dennoch zu bewerkstelligen?
PS: Nicht über die Banalität des Beispiels wundern. Ich habs nur abstrahiert um auf den Punkt zu kommen.
Grüße
Cody