C++ Wrapper nötig? (cURL / libxml2)

02/09/2016 22:36 Krabat2#1
Hallo :)
Kurze Frage, sind C++ Wrapper wirklich nötig? Ich benutze ab und zu die cURL libary und für C++ gibt es ja einen C++ Wrapper namens "curlpp", meine Frage ist welche Vorteile diese Wrapper bringen und ob sie notwendig sind (mit cURL alleine hat alles auch gut funktionier :D)

Oder liegt es einfach daran dass es ein schlechter Programmierstil ist C und C++ zu vermischen?
02/10/2016 01:12 Shadow992#2
Quote:
Originally Posted by Krabat2 View Post
Oder liegt es einfach daran dass es ein schlechter Programmierstil ist C und C++ zu vermischen?
Schlecht ist vielleicht übertrieben, denn es gibt einige Sachen, die in reinem ANSI-C eben viel schneller ablaufen als in C++.
Aber zumindest sollte man das nur machen, wenn es nötig ist.

Das heißt:
Gewissermaßen ist C und C++ mischen kein guter Stil.
Damit ist aber weniger gemeint alles in Klassen zu klatschen als viel mehr so Sachen wie "malloc" statt "new" benutzen oder "char*" statt "std::string". Auch "NULL" anstatt "nullptr" oder "T*" anstatt Smart-Pointern ist nicht gerade empfehlenswert.
Es sind also mehr die Kleinigkeiten, die man hier konkret anspricht.
"Globale" Funktionen kann man auch in C++ benutzen, ohne dass es gleich ein schlechter Stil ist (du solltest aber vielleicht einen Namespace benutzen).

Alles in allem bringt aber jede std:: Klasse einen gewissen Overhead mit, allgemein bringt jede Klassen-Orientierung immer einen gewissen Overhead mit. Das heißt es gilt oft abzuwägen.

Aber um die Brücke zu deiner Frage zu schlagen:
Ich kenne curl nicht direkt, kann mir nur allgemein ein paar Funktionen vorstellen.
Ganz allgemein kann man aber sagen, dass so Sachen wie "std::string sendRequest(std::string url)" sicherlich keinen wrapper brauchen.
Da aber viele Funktionen in etwa so aufgebaut sein werden:
"bool setCookie(struct SomeHTTPInfoStruct,std::string)"
macht es schon Sinn einen wrapper zu benutzen, um sich diese unnötige Arbeit zu erleichtern.

Aber letztendlich bleibt es Geschmackssache.
02/10/2016 13:06 warfley#3
C++ Wrapper vereinfachen vieles.

Programmbibliotheken sind normalerweise ja nur eine Sammlung von Funktionen, die keine erweiterten Strukturen aus z.B. C++ enthalten, die Wrapper werden daher meist nur für C geliefert, da man diese in andere Sprachen leicht (und automatisiert) übersetzen kann. C++ Wrapper nehmen jetzt den C Wrapper und binden den in C++ übliche Strukturen ein, Namespaces, Klassen, all das was Sprachspezifisch ist und nicht so einfach übernommen werden kann. Das macht die Nutzung aber zum einen für gewohnte C++ Programmierer einfacher, zum anderen auch generell angenehmer durch z.B. Reference counted Objekte.

Normalerweise sind solche Bibliotheken auch immer recht ähnlich, sei es SDL, OpenSSL, oder ähnliche, es ist immer das selbe Prinzip, es gibt eine Initialisierungsfunktion mit der die nötigen Informationen in einen Record/Struct schreibt, dann einen Haufen Funktionen die mit diesem Record arbeiten, und am Ende kommt noch eine Close Funktion um die Daten freizugeben, das ist die C Variante Klassen zu simulieren. Und da macht es natürlich auch Sinn einfach eine Klassenstruktur drum herum zu bauen, so hat man das ganze Übersichtlicher und vor allem hat man dann auch die Vorteile von Klassen die man mit C nicht so einfach bekommt, wie z.B. Konstruktoren/Destuktoren, Reference Counting, Sichtbarkeitsbereiche Public und Private, falls nötig Vererbung, etc.
All das kann in C zwar u.a. Simuliert werden, ist/wäre allerdings sehr viel aufwendiger.

Natürlich kann man einfach den C Wrapper verwenden, aber meist macht der C++ Wrapper einem die Sache noch leichter, und man muss nicht aus seinem gewohnten C++ Programmierstil ausbrechen.

Zwar hat Shadow992 recht, es gibt einen Overhead, allerdings ist das nur ein sehr geringer Konstanter Overhead, und in Zeiten in denen Computer 4-8 GB Ram und 2-3 GHZ pro Prozessor(kern) haben ist das eher zweitrangig und in den meisten Fällen irrelevant.