Design einer Bibliothek



  • Hallo allerseits,

    ich möchte gerne den ganzen Code, den ich in den letzten Monaten so geschrieben habe, etwas sauber in eine Bibliothek bzw. viele kleine Teilbibliotheken verpacken.

    Es handelt sich um eine Bib für Bildverarbeitungsalgorithmen und ich würde gerne eure Meinung zum Aufbau erfahren.

    Also im Endeffekt habe ich viele kleine Module, wie zum Beispiel morph (morphologische Operatoren), video (Videos ein- und auslesen) oder interpolation (Interpolationsalgorithmen). Diese Teile möchte ich gerne in getrennten libs haben (libmorph.a, libvideo.a, libinterpolation.a).

    Die Frage, die sich mir stellt, sind zum Beispiel namespaces: Eigentlich hätte ich gerne alle Module in einem namespace cvl. Wenn ich aber getrennt an den Modulen arbeite, kann es ja durch Unachtsamkeit passieren, dass ich zum Beispiel zwei Funktionen mit gleicher Signatur in den Teilprojekten habe, die sich getrennt übersetzen lassen, wenn ich aber in einem neuen Projekt beide Libs benutze, bekäme ich Probleme.

    Wenn ich aber keine namespaces benutze, bräuchte ich eindeutige Klassenbezeichner. Dann habe ich aber wieder das Problem, dass die morphologischen Operatoren zum Beispiel in keiner Klasse liegen, weil das meiner Ansicht nach Overkill wäre.

    Also alles in allem wüsste ich gerne, wie ihr das aufbauen würdet. Hoffe, ich habe mein Problem so dargestellt, dass man da durchblickt. 😃

    Viele Grüße, mbu.



  • ich würd es auf jeden fall mit namespaces machen - und halt darauf achten, dass die fkt verschieden heißen bzw noch mal in namespaces unterteilen...

    namespace my
      {
        namespace morph:
          { /* bla */ };
        namespace video:
          { };
      };
    

    würd ich nich nur so machen, sondern mach ich so gar wirklich so ^^

    bb



  • Ach siehste, das wusste ich gar nicht, dass man namespaces ineinander verschachteln kann. Das klingt wie ein ganz guter Ansatz.

    Was haltet ihr von dem Problem mit den Funktionen, die nicht in einer Klasse liegen. Ein Kollege meinte, er würde diese Funktionen trotzdem in eine Klasse packen (zum Beispiel Morph::erode oder Morph::dilate) und diese Funktionen/Methoden dann static machen.



  • Wenn ich fragen darf, wie machst du deine Bibliothek ?

    Ich frage deswegen weil du sie mit C++ machen willst, und libs in C++ sind nicht Compilerunabhängig (oder ist dir das egal weil die Bibliothek sowieso nur du verwendest und sonst niemand) ?

    Bin noch Anfänger in diesem Thema, und würde auch gern eine Bibliothek in C++ schreiben (mit Klassen), da hab ich erfahren das ist keine gute Idee.

    Danke



  • Ich schreibe die Bibliothek in C++ (deswegen dieses Forum und die Erwähnung von Klassen 😃 ). Wieso sollte das nicht unabhängig vom Compiler sein? Sollte doch kein Problem sein, wenn ich versuche, mich an den C++-Standard zu halten?



  • Der C++-Standard definiert keine Binärformate.

    Siehe z.B. Boost, hier werden die Bibliotheken, die eine Übersetzung erfordern, für jeden Compiler (und tlw. dessen Version) separat übersetzt.



  • mbu schrieb:

    Ach siehste, das wusste ich gar nicht, dass man namespaces ineinander verschachteln kann. Das klingt wie ein ganz guter Ansatz.

    Was haltet ihr von dem Problem mit den Funktionen, die nicht in einer Klasse liegen. Ein Kollege meinte, er würde diese Funktionen trotzdem in eine Klasse packen (zum Beispiel Morph::erode oder Morph::dilate) und diese Funktionen/Methoden dann static machen.

    Ich würde die Funktionen direkt in einen Namespace packen, wenn sie keine umfassende Klasse brauchen. Namespaces bieten einen logischen Zusammenhang; erst wenn ich bemerke, dass meine Funktionen gemeinsame Daten brauchen würd ich die in eine Klasse packen.
    Ich würde sogar so weit gehen, und so viele Funktionen wie möglich und sinnvoll außerhalb der Klassen haben. Dazu gibts einen netten Artikel: http://www.gotw.ca/gotw/084.htm



  • mbu schrieb:

    Ich schreibe die Bibliothek in C++ (deswegen dieses Forum und die Erwähnung von Klassen 😃 ). Wieso sollte das nicht unabhängig vom Compiler sein? Sollte doch kein Problem sein, wenn ich versuche, mich an den C++-Standard zu halten?

    😃 Schon klar das es C++ ist 🙂 aber wie du 2 Posts ober mir lesen kannst ist es nicht compilerunabhängig, aber wenn nur du die Bibliothek verwendest ist es eigentlich egal (vorrausgesetzt du verwendest dann nur diesen Compiler für weitere Projekte mit der Bibliothek), wie gesagt, wollte nur fragen weil ich auch eine C++ lib schreiben möchte, und immer noch nach einem besseren Lösungsvorschlag suche, aber glaube da gibt es nichts (außer vielleicht COM aber damit kenne ich mich noch nicht aus).

    schönen Abend noch und viel Erfolg bei deiner lib, auch wenn ich dir dazu nicht helfen kann 😃



  • Wenn die Bibliothek im Source vorliegt kann man sie (sofern sie Standard-konform ist) ja einfach mit jedem Compiler übersetzen, dann passt auch das ABI (das "Binärformat").
    Ansonsten macht man eben für alle grösseren Compiler eigene Binaries.



  • Ok, jetzt raff ich das. Aber ich hab tatsächlich nicht vor, das Ding zu publizieren. Muss nur selber mit arbeiten die nächsten Jahre und will mir das Ganze so einfach wie möglich machen.



  • mbu schrieb:

    das Ganze so einfach wie möglich machen.

    dann speicher es einfach ab und include es - wie du das bei std::vector oder so auch machst...


Log in to reply