Bitmaske zu groß
-
Was hast du überhaupt vor?
typedef enum { [...] XXX_YYY = ((unsigned _int64)1) << 64, // produces warning C4293: "<<": [...] } MyType; typedef unsigned int TypeMask; TypeMask myMask = XXX_YYY | [..]; if ( myMask & currentType ) { [...]Problem ist nur, dass ich mehr als 64 Typen habe.
Beschreibung:
Es soll ein (Text)Parser sein, der mit einem vorgegebenen Suchpattern filtern kann und gleichzeitig performant arbeitet.
-
Versuch mal zu beschreiben, was du vor hast - nicht, wie du es implementieren willst
-
Wenn die Variable nur 64 Bit hat, kann man eben auch nur auf 64 Bit prüfen.
Da musst du dir wohl was anderes einfallen lassen.
-
Vielen Dank für den qualifizierten Beitrag.
Ich habe mich gerade deshalb an das Forum gewandt, weil hier eigentlich immer gute Hinweise/Ideen gemacht werden.
-
Zickedi schrieb:
Vielen Dank für den qualifizierten Beitrag.
Ich habe mich gerade deshalb an das Forum gewandt, weil hier eigentlich immer gute Hinweise/Ideen gemacht werden.Wird schon, keine Bange.
Aber ich fürchte, die Lösung, die wir nachher zusammen erarbeiten, wird Dich überraschen. Und sie wird kaum noch so aussehen wie Dein Ansatz. Sie wird sogar Techniken und Sprachmittel einsetzen, die Du noch nicht kennst. Aber das ist auch gut so. Deswegen magst Du ja dieses Forum.
Jetzt ist unskilled stark zielführend.
"Versuch mal zu beschreiben, was du vor hast - nicht, wie du es implementieren willst"
Vielleicht gibt es in C++ viel stärkere Tricks als Bitfelder. Laß mal unskilled ein wenig rumzaubern, der kann entgegen seines Nicks schon einiges. So Dinge halt. So Dinge, weshalb C++ bei einigen Spielern einen schlechten Ruf hat.
*Popcorn hol*
-
Zickedi schrieb:
Was hast du überhaupt vor?
typedef enum { [...] XXX_YYY = ((unsigned _int64)1) << 64, // produces warning C4293: "<<": [...] } MyType; typedef unsigned int TypeMask; TypeMask myMask = XXX_YYY | [..]; if ( myMask & currentType ) { [...]Problem ist nur, dass ich mehr als 64 Typen habe.
Damit kann man 1.84467441 × 1019 Typen definieren, wenn man mask == currentType vergleicht.
Beschreibung:
Es soll ein (Text)Parser sein, der mit einem vorgegebenen Suchpattern filtern kann und gleichzeitig performant arbeitet.Wozu brauchst du dazu so ein Enum?
-
ähm schrieb:
Damit kann man 1.84467441 × 1019 Typen definieren, wenn man mask == currentType vergleicht.
Damit hast du "Typ" aber neu definiert
Denn bei dir kann nur ein einzelner "Typ" gleichzeitig auftreten, der OP will aber mehr als 64 voneinander unabhängige "Typen", die in Kombinationen auftreten können.
-
Michael E. schrieb:
der OP will aber mehr als 64 voneinander unabhängige "Typen", die in Kombinationen auftreten können.
Solche Bitflag-Vergleiche funktionieren mit std::bitset doch problemlos, auch mit sehr vielen Bits. Was spricht also dagegen ?
-
Von meiner Seite aus nichts, frag den OP

-
nn schrieb:
Michael E. schrieb:
der OP will aber mehr als 64 voneinander unabhängige "Typen", die in Kombinationen auftreten können.
Solche Bitflag-Vergleiche funktionieren mit std::bitset doch problemlos, auch mit sehr vielen Bits. Was spricht also dagegen ?
Vermutlich dass es langsam wäre.
-
Ich verstehe auch noch immer nicht, wie ein Typ mehrere Typen sein kann...
Ich meine - in welchem Bereich macht es denn Sinn, einen Variablen-Typ so dynamisch gestalten zu wollen? Wie soll der User-Code dazu dann aussehen?Oder kanns doch immer nur 1 Typ sein und du dachtest, dass es so einfach schneller ausgewertet werden kann?
-
unskilled schrieb:
Ich verstehe auch noch immer nicht, wie ein Typ mehrere Typen sein kann...
Mehrfachvererbung?
Bzw. reicht auch schon ganz normale Vererbung...
-
hustbaer schrieb:
unskilled schrieb:
Ich verstehe auch noch immer nicht, wie ein Typ mehrere Typen sein kann...
Mehrfachvererbung?
Bzw. reicht auch schon ganz normale Vererbung...da wärs vrmtl einfacher und performanter, für jeden typen ne fkt anzubieten...
-
Ich wollte dir nur auf deine Frage antworten, wie ein Type mehrere Typen sein kann.
Ob das so wie der OP es macht Sinn macht oder nicht - keine Ahnung, dazu müsste ich den Thread hier erstmal gründlicher lesen.
-
Da findest Du auch nix. OPs letzter Beitrag zu dem Thema ist naemlich am Anfang von Seite 2 und trotzdem wird fleissig weiter diskutiert, obwohl niemand weiss, was OP will.

-
Hihi, das ist "gute alte C++.de-Tradition"

(OK, gut sei mal dahingestellt, aber alt auf jeden Fall)