Ho solo bisogno di utilizzare la funzione di confronto tra stringhe senza distinzione tra maiuscole e minuscole maiuscole e minuscole della libreria BOOST iequals
.È possibile includere/importare una singola funzione da una libreria in C++
Sto utilizzando #include <boost/algorithm/string.hpp>
per importarlo.
Esiste un modo per importare solo la funzione iequals
?
Il motivo per cui mi interessa (sono davvero curioso) è perché la DLL compilata è di circa 230kB se non lo faccio #include
e circa 1,1 MB se lo faccio. In questo caso particolare, non fa molta differenza quanto è grande il file, ma sembra che ci sia un sacco di cose che vengono importate e mai usate. Cosa succede se la libreria era di pochi GB e avevo solo bisogno di una delle funzioni? Allora diventerebbe un problema, immagino.
Sono certamente ingenuo quando si tratta di qualsiasi cosa relativa a cpp-related, ma ritengo che non sia molto efficiente includere circa 750kB di codice quando probabilmente il 90% di esso non viene utilizzato. Potrebbe essere che la funzione iequals
usi tutto questo 750kB, non ne ho idea.
Quindi, ancora una volta, se la funzione iequals
include molte delle stesse librerie, il file sarebbe comunque altrettanto grande.
Pensieri?
Grazie in anticipo per qualsiasi consiglio.
MODIFICA:
Grazie per le risposte. Sto facendo del mio meglio per capirli.
Sono un ingegnere chimico che sta riscrivendo un mucchio di macro VBA orribilmente lente e scarsamente ottimizzate in una DLL C++. Finora i risultati sono stati eccezionali e tutto funziona correttamente. Semplicemente non vedo la necessità della dimensione extra del file se ho solo bisogno di fare un singolo tipo di confronto tra due stringhe.
Un esempio del confronto ho bisogno di fare è la seguente:
if (SomeBSTR == "SomeTextHere") {
// do stuff
}
o più esattamente:
if (Gas == "Methane" or
Gas == "CH4" or
Gas == "C1") return 1;
if (Gas == "Ethane" or
Gas == "C2H6" or
Gas == "C2") return 2;
Se questo è il solo tipo di confronto che devo fare, può io lo faccio in un modo più semplice di:
int wStrCmp(const BSTR Str1, const wstring Str2) {
wstring wStr1(Str1, SysStringLen(Str1));
return boost::iequals(Str1, Str2);
}
che si chiama via:
0.123.516,41 milaif (wStrCmp(Gas, L"Methane") or
wStrCmp(Gas, L"CH4") or
wStrCmp(Gas, L"C1")) return 1;
Questi ultimi 2 blocchi sono praticamente incollati dal mio codice.
Grazie ancora, ragazzi.
Hai pensato di usare [ 'strcasecmp'] (http://linux.die.net/man/3/strcasecmp) (POSIX) o [' _stricmp'] (http://msdn.microsoft.com/en -us/library/k59z8dwe% 28v = vs80% 29.aspx) (Windows) invece? –