Gute Frage, laut Hilfe (DocWiki) gibt es in C++ ein Attribut, für Weak-Typen.
https://docwiki.embarcadero.com/RADS.../GNU-Attribute
Im Delphi probiert, funktioniert es nicht.
Delphi-Quellcode:
type
[Weak] NewInt = type Integer; // wirkungslos (keine CompilerWarnung, aber Weak hat eh nur eine Wirkung auf Variablen mit Managed-Types ala Interface)
NewInt = [Weak] type Integer; // compiliert nicht
NewInt = type [Weak] Integer; // compiliert nicht
Prinzipiell gibt es das schon ewig, aber das Verhalten des Compilers hat sich geändert
und dementsprechend haben sie einige "ihrer" Typen ab jetzt anders deklariert,
Scheinbar war NativeInt früher sowas wie ein
type Integer
und ist nun nur noch
Integer
.
Aber der Compiler und CodeInsight behandeln nun "Alias" anders.
Früher wurde beim CodeInsight (CodeCompletion) und HelpInsight (Hint mit Deklaration) immer der "ursprüngliche" Typ angezeigt, aber jetzt der "Deklarierte".
Und das hat endlich einen enormen Vorteil, denn wenn du dir im Editor die Deklaration von SendMessage ansiehst, dann steht dort endlich LPARAM/WPARAM/LRESULT und nicht nur NativeInt, bzw. ganz früher Integer.
siehe Anhang -> HWND ist ein eigener Typ (stong-type) und der Rest nur ein Alias (weak-type)
Delphi-Quellcode:
type
AliasInt = Integer;
NewInt = type Integer;
TTest = record
procedure doIt(I: Integer); overload;
procedure doIt(I: Int64); overload;
//procedure doIt(I: NativeInt); overload; // unter D11 konnte man das noch deklarieren, da NativeInt ein "eigener" Typ war
//procedure doIt(I: AliasInt); overload; // geht nicht, weil ist Typ "identisch" mit Integer
procedure doIt(I: NewInt); overload;
end;
procedure TForm2.FormCreate(Sender: TObject);
var
i4: Integer; // Int32 = Integer
i8: Int64;
ix: NativeInt;
ai: AliasInt;
ni: NewInt;
lp: LPARAM; // LPARAM = INT_PTR = IntPtr = NativeInt
Test: TTest;
begin
Test.doIt(i4);
Test.doIt(i8);
Test.doIt(ix); // im D11 weiß NativeInt nicht wo hint, alo ob Integer oder NewInt
Test.doIt(ai); // Links die Maus über "ai" halten - früher wurde es überall als "Integer" angezeigt, jetzt als "AliasInt"
Test.doIt(ni);
Test.doIt(lp); // seid D12 wird es als "LPARAM" angezeigt, aber früher als "NativeInt"
end;
procedure TTest.doIt(I: Integer);
begin
end;
procedure TTest.doIt(I: Int64);
begin
end;
{procedure TTest.doIt(I: NativeInt);
begin
end;}
procedure TTest.doIt(I: NewInt);
begin
end;
PS: Ich hab soeben beim "Verantwortlichen" nochmal nachgefragt ... mal sehn ob/was er antwortet.
https://blog.marcocantu.com/blog/202...eak-alias.html