Ich brauche nur die iequals
-Zeichenfolgevergleichsfunktion aus der BOOST-Bibliothek zu verwenden.Kann ich eine einzelne Funktion aus einer Bibliothek in C++ einfügen/importieren?
Ich verwende #include <boost/algorithm/string.hpp>
, um es zu importieren.
Gibt es eine Möglichkeit, dass ich nur die iequals
Funktion von selbst importieren konnte?
Der Grund, warum ich sogar kümmern (ich bin wirklich nur neugierig.) Ist, weil die kompilierte DLL ist etwa 230kB wenn ich nicht #include
es tun und etwa 1,1 MB, wenn ich es tue. Es macht in diesem speziellen Fall keinen großen Unterschied, wie groß die Datei ist, aber es scheint, als ob es eine Menge Sachen gibt, die importiert und nie benutzt werden. Was wäre, wenn die Bibliothek ein paar GB groß wäre und ich nur eine der Funktionen benötige? Dann würde es ein Problem werden, stelle ich mir vor.
Ich bin zwar naiv, wenn es um fast alles cpp-bezogene geht, aber ich habe das Gefühl, dass es nicht sehr effizient ist, 750kB Code einzuschließen, wenn wahrscheinlich 90% davon nicht verwendet werden. Es könnte sein, dass die iequals
Funktion alle diese 750kB verwendet, ich habe keine Ahnung.
Wenn die iequals
-Funktion wiederum viele derselben Bibliotheken enthält, wäre die Datei immer noch genauso groß.
Gedanken?
Vielen Dank im Voraus für eine Beratung.
EDIT:
Vielen Dank für die Antworten. Ich tue mein Bestes, um sie zu verstehen.
Ich bin ein Chemieingenieur, der eine Reihe schrecklich langsamer und schlecht optimierter VBA-Makros in eine C++ - DLL umwandelt. Bisher waren die Ergebnisse hervorragend und alles funktioniert einwandfrei. Ich sehe nur nicht die Notwendigkeit für die zusätzliche Dateigröße, wenn ich nur eine einzige Art von Vergleich zwischen zwei Strings machen muss.
Ein Beispiel für den Vergleich, den ich tun müssen, ist wie folgt:
if (SomeBSTR == "SomeTextHere") {
// do stuff
}
oder genauer:
if (Gas == "Methane" or
Gas == "CH4" or
Gas == "C1") return 1;
if (Gas == "Ethane" or
Gas == "C2H6" or
Gas == "C2") return 2;
Wenn dies die einzige Art des Vergleichs ist, dass ich zu tun haben, können ich mache es auf einfachere Weise als:
int wStrCmp(const BSTR Str1, const wstring Str2) {
wstring wStr1(Str1, SysStringLen(Str1));
return boost::iequals(Str1, Str2);
}
die über aufgerufen:
if (wStrCmp(Gas, L"Methane") or
wStrCmp(Gas, L"CH4") or
wStrCmp(Gas, L"C1")) return 1;
Die letzten 2 Blöcke sind praktisch aus meinem Code eingefügt.
Danke nochmal, Leute.
Haben Sie überlegt, ['strcasecmp'] (http://linux.die.net/man/3/strcasecmp) (POSIX) oder [' _stricmp'] zu verwenden (http://msdn.microsoft.com/de) -us/library/k59z8dwe% 28v = vs.80% 29.aspx) (Windows) statt? –