Generische TypeSelects

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;
};