Potrzebuję tylko korzystać z funkcji porównywania wielkości liter niewrażliwych na wielkość iequals
z biblioteki BOOST.Czy mogę dołączyć/importować pojedynczą funkcję z biblioteki w C++
Do importowania używam #include <boost/algorithm/string.hpp>
.
Czy istnieje sposób, aby samodzielnie zaimportować funkcję iequals
?
Powód, dla którego się o mnie troszczyłem (jestem naprawdę ciekawy.) Jest to, że skompilowana biblioteka DLL ma około 230kB, jeśli nie mam jej #include
i około 1,1 MB, jeśli to zrobię. W tym konkretnym przypadku nie ma większego znaczenia, jak duży jest plik, ale wygląda na to, że jest wiele rzeczy, które są importowane i nigdy nie są używane. Co się stanie, jeśli biblioteka będzie miała kilka GB i potrzebuję tylko jednej z funkcji? Wtedy wyobrażam sobie, że stanie się to problemem.
Jestem wprawdzie naiwny, jeśli chodzi o wszystko, co dotyczy cpp, ale uważam, że nie jest to zbyt wydajne, aby dodać jakieś 750kB kodu, gdy prawdopodobnie 90% z niego nie jest używane. Możliwe, że funkcja iequals
wykorzystuje wszystkie te 750kB, nie mam pojęcia.
Ponownie, jeśli funkcja iequals
zawiera wiele tych samych bibliotek, plik będzie nadal tak samo duży.
Myśli?
Z góry dziękuję za radę.
EDYTOWANIE:
Dzięki za odpowiedzi. Robię, co w mojej mocy, aby je zrozumieć.
Jestem inżynierem chemii, który przepisuje mnóstwo strasznie wolnych i źle zoptymalizowanych makr VBA do biblioteki DLL C++. Do tej pory wyniki były wyjątkowe i wszystko działało poprawnie. Po prostu nie widzę potrzeby dodatkowego rozmiaru pliku, jeśli potrzebuję tylko jednego typu porównania dwóch ciągów.
Przykładem porównania muszę zrobić to w następujący sposób:
if (SomeBSTR == "SomeTextHere") {
// do stuff
}
lub bardziej dokładnie:
if (Gas == "Methane" or
Gas == "CH4" or
Gas == "C1") return 1;
if (Gas == "Ethane" or
Gas == "C2H6" or
Gas == "C2") return 2;
Jeśli jest to jedyny rodzaj porównania, że muszę to zrobić, może I zrobić to w bardziej prosty sposób niż:
int wStrCmp(const BSTR Str1, const wstring Str2) {
wstring wStr1(Str1, SysStringLen(Str1));
return boost::iequals(Str1, Str2);
}
który jest nazywany przez:
if (wStrCmp(Gas, L"Methane") or
wStrCmp(Gas, L"CH4") or
wStrCmp(Gas, L"C1")) return 1;
Te ostatnie 2 bloki są praktycznie wklejone z mojego kodu.
Jeszcze raz dziękuję, chłopaki.
Czy rozważałeś użycie ['strcasecmp'] (http://linux.die.net/man/3/strcasecmp) (POSIX) lub [' _stricmp'] (http://msdn.microsoft.com/pl -us/library/k59z8dwe% 28v = vs.80% 29.aspx) (Windows) zamiast tego? –