C++ Design-Frage



  • Hi,

    Ich hab ne Klasse DelegateList in der ich eine Beliebige anzahl Funktoren speichere.

    Sinn und Zweck dieser Klasse ist es mit einem einzigen Call alle Funktoren auszulösen. Könnte man z.b. für Shutdown events, zum aufräumen, benutzen.

    Der Code kann hier eingesehen werden. [edit]Das ist ein Testcode. D.h. man kann ihn sogar testen *g*. Bisher hab ich es nur mit g++ 3.3/3.4 getestet (unter Linux) Wenn jemand lust hat kann er mir ja von Compiler Problemen berichten, sollten welche auftreten.[/edit]

    Ja, ich weiß der Source ist scheiße formatiert *blabla* darum geht es net 😛
    Mir geht es jetzt um die Schnittstelle.

    Was ist eurer Meinung nach besser:

    push_back / push_front Methoden anzubieten( Das hab ich im moment )

    oder einfach nur eine add Methode.

    Ich möchte euch bitten eure Meinung zu begründen.

    Zu push_back/push_front kann ich sagen das ich die Reihenfolge garantieren kann, sollte das notwendig sein.

    Sonstige Kritiken, Vorschläge und Trollversuche(🤡) sind natürlich wie immer herzlich willkommen

    MfG



  • Klingt für mich ziemlich selbstverständlich. 🙂

    Ist die Reihenfolge wichtig, und soll der Anwender die Reihenfolge vorgeben
    dann ist add einfach nicht ausreichend => 😉 es sei denn du hast uns zusätzliche
    Parameter (auch geplante) verschwiegen.



  • += operator 😉



  • Kommt es bei Delegates auf die Reihenfolge an?
    Wenn du dir eine Situation denken kannst, wo das der Fall ist - dann bedenke:
    push_back und push_front reichen nicht. Denn dann müsstest du ja wieder in der richtigen reihenfolge pushen...

    dh, du bräuchtest auch ein insert() was uns aber zu dem Problem führt: wie identifiziert man ein delegate? mir hat die .NET Methode mit "list-=new Delegates(bla)" nie gefallen...

    ein add() sollte dennoch eine reihenfolge garantieren, welche ist egal, aber die reihenfolge muss nachvollziehbar sein, was du ja sowieso hast, denn du wirst dafür ja keine map nehmen...

    welche der 2 möglichkeiten du nimmst, ist denke ich mal vom einsatzgebiet abhängig:

    1. .add()
    2. oder push_* + insert + remove

    2teres ist natürlich komplexer und da stellt sich die frage: lohnt es sich?
    da du eine library schreiben willst, lohnt sich der aufwand vermutlich schon. nur solltest du dir, wenn möglich, etwas schöneres als

    list.remove(create_delegate(foobar));

    überlegen. denn dann hättest du das problem von gestern, dass du smart pointer brauchst, weil du eben nicht mehr garantieren kannst, wann ein delegate flöten geht...



  • hi

    @Shade schon mal danke für die antwort.

    Nein es kommt bei Delegates bestimmt nicht auf die Reihenfolge an. Ich dachte einfach nur das es nice wäre das man die Reihenfolge garantieren kann.

    Es sollte dann aber auch jeder zeit möglich sein diese wieder aus der Liste zu entfernen, was ein Problem darstellen könnte. Du hast schon recht mit dem add()


Anmelden zum Antworten