IF-Abfrage von Delphi nach C++

Hallo,

ich habe bisher in Delphi programmiert und beginne nun meine Programme mit C++ zu schreiben.

In Delphi habe ich z.B. folgende Abfrage:

if (x in [0..9, 20..29]) then

Nun suche ich auch eine Abfrage unter C++. Natürlich könnte man auch eine AND Abfrage machen, aber sowas wie „IN“ wäre mir lieber.

Gibt es sowas?

Gruß
Daniel

Hallo,

In Delphi habe ich z.B. folgende Abfrage:

if (x in [0…9, 20…29]) then

Nun suche ich auch eine Abfrage unter C++. Natürlich könnte
man auch eine AND Abfrage machen, aber sowas wie „IN“ wäre mir
lieber.
Gibt es sowas?

Sowas gibt es nicht, man kann es sich aber leicht
selber basteln.

Auf die schnelle wäre das so möglich:

 #include 
 #include 

 ...
 ...
 ...

 int main()
{
 int x=8;
 if( InRange( x ) ["0..9, 20..29"] ) 
 printf("%d ok\n", x);
 else
 printf("%d nicht ok\n", x);
 return 0;
}

D.h., wir basteln uns eine Klasse „InRange“,
die die Rangiererei mehr oder weniger gut
übernimmt. Nun fehlt nur noch eben diese Klasse.

Eine Variante wäre ein Quick-hack dieser Klasse:

class InRange {
 int a, b, v;
 public: InRange(int x) : v(x) {}
 bool operator[] (char \*s) { 
 char buf[256], \*p=strtok(strcpy(buf, s), ", ");
 while( p != NULL ) {
 if( sscanf(p, "%d..%d", &a, &b)==2 && (v\>=a && v  
**welche zwar ordentlich funktioniert, aber aus ver-  
schiendenen Gründen nich so "schön" aussieht. Aber   
da das Interface stimmt, kann man die Innereien der   
Klasse später noch verbessern, während das restliche   
Programm unverändert bleibt.  
  
Ausserdem kann man diese Klasse in einer header-Datei  
(z.B. InRange.h) verstecken und immer bei Bedarf   
per #include "InRange.h" einbinden.  
  
  
Grüße  
  
CMБ**  

Wenn schon selber bauen, dann würde doch lieber ordentlich arbeiten und nicht mit irgendwelchen Strings operieren. Als am besten einen vector nehmen…

Hallo Ben,

Wenn schon selber bauen, dann würde doch lieber ordentlich
arbeiten und nicht mit irgendwelchen Strings operieren. Als am
besten einen vector nehmen…

Leider gibt es erst ab C++0x die ‚list-initialization‘
von Klassen, also etwa:

std::vector v = { 1, 2, 3, 4 };

Wie willst Du denn einen solchen Operator IN()
(wie der OP ihn haben will) einigermaßen
expressiv hinbekommen?

Grüße

CMБ