Das wird so wohl nichts. Wie soll der Compiler denn wissen von welchen Typ T ist. Sechs Varianten sind erlaubt bei Add.
Da müsste es dann schon eine "function Add(const Element: <T>): TJSONArray" geben.
in TS kann ich die Typvariable einschränken...
Ja ich weiß....
Wenn man den Typ "einschränkt", dann compiliert es:
class Function ArrToJSON<T: TJSONArray>(const aArr:TArray<T>):String;
Leider kann man nur auf Klassen, Interfaces und Records einschränken, nicht auf String, Integer etc.
Aber du könntest sowas versuchen (ungetestet):
Delphi-Quellcode:
if TypeInfo(T) = TypeInfo(
string)
then
JSArr.Add(
String(element))
else if TypeInfo(T) = TypeInfo(Double)
then
JSArr.Add(Double(element))
...
else
Raise Exception.Create((PTypeInfo(TypeInfo(T))^.
Name + '
not allowes');
Ja es wär schon cool wenn es eine notation dafür gäbe.
Ist ok
Ich hoffe einfach mal das ich nie etwas anderes als TArray<String> brauche. Und wenn mal was dazu kommt dann gibts halt overloaded versionen. Ich halte ja eh nichts von DRY.