Implementierungsdetails verbergen



  • Hi,

    ich habe eine Klasse, die Clients verwaltet. Sie hält also ein Array mit einer bestimmten Größe. Ich bin noch am Überlegen, ob ich das Array durch einen std::vector oder "einfach so" mit new[] erstelle.

    In beiden Fällen habe ich jedenfalls ein Problem:

    Wie iteriere ich am Besten über die Elemente? Gut, im Fall des std::vector könnte ich einen iterator zurückgeben. Das reicht aber leider nicht aus, oder? Ich muss auch den std::vector mit übergeben? Damit fällt diese Lösung für mich raus, da ich meine Implementierungsdetails offen lege.

    Im Falle des "normalen" Arrays könnte ich mir eine Iterator-Klasse schreiben. Aber ist das so sinnvoll? Schließlich bietet std::vector ja alles was ich brauche. Nur die Sache mit dem iterator stört mich... Denn ohne den std::vector kann ich ja nicht richtig iterieren... 🙄

    Wie wird sowas gelöst?

    Vielen Dank,
    Markus K.



  • Wozu brauchst du den Vektor um über ihn zu iterieren? Gib einfach ein std::pair<std::vector<Foo>::const_iterator, std::vector<Foo>::const_iterator> zurück wobei du das Paar mit make_pair(foo_vec.begin(), foo_vec.end()); initialisierst, dann hat der Client alles was er braucht.

    Ist Foo allerdings nicht ein öffentlich bekanntes Objekt, dann soll der Client deiner Klasse dir einen Funktionszeiger/Funktionsobjekt übergeben und du gehst über das Array und rufst den übergebenen Funktor für jedes Objekt im Vektor auf.


Anmelden zum Antworten