[wxWidgets] wxID_ANY vs. Eigene IDs



  • Nabbend alle zusammen!

    Hab bereits die Boardsuche benutzt und Google auf Deutsch und Englisch mit verschiedenen Suchbegriffen befragt. Hab jedoch absolut garnichts gefunden.

    Folgendes:
    Momentan benutze ich bei meinem Kram einfach überall wxID_ANY (lasse also allen Elementen eine automatisch erzeugte ID geben).
    Will ich z.B. einen Eventhandler connecten, so besorg ich mir diese ID per ->GetId(), also z.B. myButton->GetId();.
    Das funktioniert auch so wie es soll.
    Ich benutze das hauptsächlich wegen der Flexibilität und Einfachheit, da ich nicht für jedes Steuerelement eine Neue ID enumerieren muss (is immerhin eine Zeile o.O) und mich nicht um die Organisation all dieser IDs kümmern muss. Außerdem vermeidet wxID_ANY Kollisionen.

    Ich frage mich nun, habe ich durch diese Vorgehensweise irgendwelche Nachteile?
    Ich könnte mir vorstellen:
    1. Geschwindigkeitsverlust durch 'erzeugen' neuer Ids, falls sie irgendwie komplex generiert werden und nicht nur ne zahl runtergezählt wird, aber selbst dann kann ich mir ne Verzögerung von vielleicht knappen 10 ASM-Instruktionen vorstellen im Vergleich zu hardgecodeten Zahlen.
    2. höherer Speicherverbrauch durch Verwaltung der erzeugten Ids, falls die Verwendung einer jeden Id gespeichert wird.
    3. 'Überlauf' vorhandener IDs bei zu langer Laufzeit, schließ ich aber ziemlich aus; selbst wenn pro Sekunde 500 Elemente erzeugt (und halt evtl. zerstört) werden, könnte das Programm gute 7 Wochen ununterbrochen laufen - und wer macht das schon?^^

    Seh ich es nebenbei richtig, dass es zu Kollisionsproblemen kommen kann, wenn ich mehrere Instanzen eines custom-panels mit z.B. mehreren Buttons mit statischen Ids erzeuge?

    Es gibt sicher Situationen, wo wxID_ANY wohl zwingend erforderlich ist, z.B. bei dynamischer Erstellung von Steuerelementen, mich würd jetzt aber interessieren, was für den 'Normalfall' die schönere Lösung ist.
    Als jemand, der sich mit einem Lächeln auf den Lippen ne halbe Stunde länger hinsetzt und einen Teil des Komforts bei Programmieren aufgibt, um auch nur ein oder zwei Kilobyte Speicher zu sparen oder sein Programm 1% weniger CPU-Auslastung verbrauchen zu lassen oder den noch so unwahrscheinlichen Fall eines Überlaufs zu vermeiden, würde ich sofort die ID-isierung bei meinem aktuellen Projekt ändern, wenn ich dadurch obiges erreichen könnte.

    Achja: Wenn ich auf statische IDs umstellen sollte, wie organisier ich die dann am besten?
    Eine Headerdatei mit ein paar Bereichsenums (z.B. für jede Quelldatei oder für jede logische Einheit) und dann für jeden Bereich eine eigene Enum mit allen IDs?

    Danke im Voraus,

    Ele



  • Nachteile hast du keine.
    Manche stehen halt auf die Event-Tables, da sind leider eigene ID's zwingend notwendig.



  • Neenee, die Event-Tables waren mir von Anfang an etwas suspekt. Connect find ich viel schöner 😉

    Also bleib ich bei wxID_ANY!

    Danke!


Anmelden zum Antworten