====== Generische TypeSelects ====== Das Beispiel der [[notes:class:typelist|Typelists]] geht auch generisch: Alle Befehle in Großbuchstaben werden zur Laufzeit ausgeführt. Die Funktion erlaubt ein Array von Parametern als ersten/letztes Parameter, die vom Typ char, char ptr oder string sein dürfen. (Alle typen sind per Default const &, sofern nicht primitiv (char, ptr). length is code( parameters of ( char, char ptr, string )[] ) { unsigned int result = 0; FOREACH( parameter in parameters ) { VERIFY parameter as char ptr { result += strlen( paramter ) } ELSE VERIFY parameter as char { result += 1; } ELSE VERIFY parameter as string { result += parameter.length(); } } return result; }; Der Aufruf der Funktion wie folgt: hello as char const ptr( "Hello" ); space as char( ' ' ) world as char const ptr("World" ); length( hello, space, world ); Hierfür wird eine Funktion erzeugt, die so aussieht: length is code( parameter1 as char ptr, parameter2 as char, parameter3 as string ) { unsigned int result = 0; result += strlen( parameter1 ); result += 1; result += parameter3.length(); return result; }; Man könnte nun auch Variablen einfügen: length is code( parameters of ( char, char ptr, string )[] ) { result as unsigned int(0); // Variable existiert immer temp AS unsigned int(0); // temp existiert nur zur Compilezeit! FOREACH( parameter in parameters ) { VERIFY parameter as char ptr { result += strlen( paramter ) } ELSE VERIFY parameter as char { temp += 1; // Hier wird nur zur Laufzeit etwas getan. } ELSE VERIFY parameter as string { result += parameter.length(); } } IF temp != 0 THEN result += temp; return result; }; Was dazu führt, dass die Chars nicht einzeln gezählt werden, sodern einzelne Chars am Ende nur aufaddiert werden. Der Aufruf der Funktion wie folgt: hello as char const ptr( "Hello" ); space as char( ' ' ) length( hello, space, 'W', 'e', 'l', 't' ); Hierfür wird eine Funktion erzeugt, die so aussieht: length is code( parameter1 as char ptr, parameter2 as char, parameter3 as char, parameter4 as char, parameter5 as char, parameter6 as char ) { unsigned int result = 0; result += strlen( parameter1 ); result += 5; // 5 chars return result; };