Das Beispiel der 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;
};
<code>
Der Aufruf der Funktion wie folgt:
<code>
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: <code> 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;
};