Wrapperklassen um C-Api schreiben



  • Wollte mal hier eine Frage durch die Runde schmeißen und fragen ob ihr bei Verwendung einer C-Api Wrapperklassen schreibt?

    Oder sollte man einfach mit der C-Api arbeiten?


  • Mod

    Manchmal ja, manchmal nein. Wenn's geht ja, besonders wenn ich's öfters benutze. Aber manche Sachen sind konzeptionell extrem schwer an C++ anzupassen. Zum Beispiel MPI, nicht einmal boost::mpi ist wirklich gut, da kriege ich selbst erst recht nichts gescheites hin. In dem Fall muss man einfach das C-Interface schlucken.



  • Bei mir lief es in der Vergangenheit oft so, dass ich zunächst anfing mit der C-API direkt zu arbeiten. Da ich überhaupt kein C Typ bin wurde das irgendwann immer total chaotisch und nervig. Ständig irgendwelche Lecks und kaum aufspürbare Fehler.. Ich hab dann in einer riesen Aktion alles umgeschrieben und den C Kram in C++ gewrappt. Hätte ich das von Anfang an gemacht, wäre es wesentlich weniger Aufwand gewesen.
    Inzwischen wird bei mir alles was irgendwie unschön ist gekabselt. C-APIs versuche ich generell zu meiden und seh mich erstmal nach C++ Alternativen um. Manchmal gibt es die aber einfach nicht und es lässt sich auch nicht immer alles in ein C++ Muster pressen, das wurde ja schon gesagt.



  • Ich wrappe sehr viel. Nicht nur C API's, sondern manchmal ebenfalls auch bereits gewrappte Sachen. Z.b gibt es von fmod (Sound Bibliothek) eine C, sowie C++ API und da ist es auch eine gute Idee die C++ API nochmal zu wrappen und den eigenen Bedürfnissen anzupassen.



  • drakon schrieb:

    Ich wrappe sehr viel.

    👍

    drakon schrieb:

    ... es auch eine gute Idee die C++ API nochmal zu wrappen und den eigenen Bedürfnissen anzupassen.

    😮

    Dann muss mir die API aber absolut nicht gefallen 🤡



  • Naja. Wrappen ist da vielleicht der falsche Begriff, aber ich abstrahiere eben viel. Aber bei fmod liegt es wirklich daran, dass es ein wenig ungeschickt gemacht ist. Da musst du die Ressourcen noch von Hand mit einem ->Release freigeben. Das ist für mich nicht unbedingt ein C++ Wrapper. 😉
    Darum kommt da einfach nochmal was drüber, damit man das nicht machen muss und ggf. noch ein paar andere Möglichkeiten hat.
    Es ist ja auch sonst sehr angenehm, wenn man noch eine kontrollierbare Ebene vor der eigentlichen API hat, damit man da noch selbst was einbauen kann, ohne gleich den ganzen Anwendungscode refactoren zu müssen.



  • drakon schrieb:

    Naja. Wrappen ist da vielleicht der falsche Begriff, aber ich abstrahiere eben viel. Aber bei fmod liegt es wirklich daran, dass es ein wenig ungeschickt gemacht ist. Da musst du die Ressourcen noch von Hand mit einem ->Release freigeben. Das ist für mich nicht unbedingt ein C++ Wrapper. 😉
    Darum kommt da einfach nochmal was drüber, damit man das nicht machen muss und ggf. noch ein paar andere Möglichkeiten hat.
    Es ist ja auch sonst sehr angenehm, wenn man noch eine kontrollierbare Ebene vor der eigentlichen API hat, damit man da noch selbst was einbauen kann, ohne gleich den ganzen Anwendungscode refactoren zu müssen.

    Geb ich dir absolut recht, aber für das ->Release hätte ich mir wahrscheinlich
    einfach einen Smart-Pointer gemacht.

    Ist halt ne Aufwand/Nutzen-Abschätzung und deswegen wohl Geschmacksache.



  • Kommt halt auch noch drauf an, was man noch so vor hat.
    Wie gesagt. Eine weitere Abstraktion kann man sehr oft gebrauchen(Fehlerüberprüfung, Logging, weitere Features usw.).


Anmelden zum Antworten