Ohne beide Typen je unter die Finger bekommen zu haben, aber kann man nicht je einen record helper schreiben, der zwischen den verschiedenen Typen automatisch konvertiert bei Zuweisung?
Das wäre meine Traumlösung mittels Implict Zuweisungen, jedoch lt. Delphi Hilfe
http://docwiki.embarcadero.com/RADSt...oading_(Delphi) Note: Class and record helpers do not support operator overloading.
Da bin ich schon an der Deklaration gescheitert. Spring4D hat das irgendwie hinbekommen (s. TValue Helper), jedoch kam ich noch nicht dazu mir das genauer anzuschauen. Ehrlich gesagt ist das mit den Operanden-Überladen noch ziemliches Neuland für mich.
Wie müsste das dann ungefähr aussehen?
Hm, so richtig will das nicht mit den generischen Operator für record helper.
Höchstens so ein "stumpfer" Ansatz mit Konvertierungsfunktionen scheint zu kompilieren:
Delphi-Quellcode:
unit Spring.Helper;
interface
uses
Spring;
type
TAureliusNullableType<T> =
record
end;
// TSpringNullable = Spring.Nullable<T>;
////
// NullableHelper<T> = record helper for TSpringNullable
// public
// class operator Implicit(const value: TAureliusNullableType<T>): Spring.Nullable<T>;
// end;
TNullableConverter<T> =
record
class function ConvertSpring(
const AureliusNullable: TAureliusNullableType<T>): Spring.Nullable<T>;
static;
class function ConvertAurelius(
const SpringNullable: Spring.Nullable<T>): TAureliusNullableType<T>;
static;
end;
implementation
{ NullableHelper }
//class operator NullableHelper.Implicit(const value: TAureliusNullableType): Spring.Nullable<T>;
//begin
//end;
{ THelper<T> }
class function TNullableConverter<T>.ConvertAurelius(
const SpringNullable: Spring.Nullable<T>): TAureliusNullableType<T>;
begin
// Hausaufgabe
end;
class function TNullableConverter<T>.ConvertSpring(
const AureliusNullable: TAureliusNullableType<T>): Spring.Nullable<T>;
begin
// Hausaufgabe
end;
end.