Zitat von
PAX:
es gibt viele dinge, die mir an c++ gefallen (im vergleich zu delphi), aber dass dann solche sachen wieder so kompliziet sein müssen...
Kompliziert?
In C sind es einfach Bitoperationen, da kannst du sicher sein, daß es kompakt bleibt und du bist nicht auf die Implementierung des Compilers angewiesen (Borland kann sich sowas leisten, die haben keine Konkurrenz):
Code:
typedef SomeSet unsigned int;
const SS_FIRST = 1 << 0; // vorsicht, C99, nicht C89 oder K&R!
const SS_SECOND = 1 << 1;
const SS_THIRD = 1 << 2;
const SS_FOURTH = 1 << 3;
SomeSet myset;
myset = SS_FIRST | SS_THIRD; // SS_FIRST und SS_THIRD im Set
myset |= SS_FOURTH; // SS_FOURTH mit ins Set genommen
myset &= ~SS_FIRST; // SS_FIRST aus dem Set entfernt;
if (myset & SS_THIRD) { }; // wird ausgeführt, wenn SS_THIRD im Set ist
Wenn dir die Bitoperationen in C zu ungewohnt sind, kannst du dir ja Funktionen (in C++ besser Templates) wie SET_INSERT() oder SET_REMOVE() schreiben. Eklig wird es dann nur, wenn dein Set mehr elemente enthalten soll, als deine Plattform Bits in Integern kennt. Mit einem long long int solltest du auf IA32 auf eine Set-Größe von maximal 64 kommen, wenn's mehr sein soll, braucht man mehr Programmlogik, aber machbar ist auch dies (und man schreibt sich seine lib ja nur einmal und bindet sie dann beliebig oft ein).
Unter C++ hast du neben eben genannter klassischen C-Lösung auch noch das Template std::set<>. Ich sehe da nicht, was daran umständlich ist. Ich persönlich finde für systemnahe Programmierung die C-Lösung "schöner" als die Pascal-Lösung, aber umständlich finde ich weder C, noch Pascal, noch C++.