Мне нужно только использовать iequals
функция сравнения строк без учета регистра из библиотеки BOOST.
я использую #include <boost/algorithm/string.hpp>
импортировать это.
Есть ли способ, которым я мог только импортировать iequals
функция сама по себе?
Причина, по которой я даже забочусь (мне действительно просто любопытно) состоит в том, что скомпилированная DLL имеет размер около 230 КБ, если я этого не сделаю #include
это и около 1,1 МБ, если я делаю. В данном конкретном случае не имеет большого значения, насколько большой файл, но кажется, что есть много вещей, которые импортируются и никогда не используются. Что делать, если в библиотеке было несколько ГБ, а мне нужна только одна из функций? Тогда это станет проблемой, я думаю.
Я, по общему признанию, наивен, когда дело касается практически всего, что связано с cpp, но я чувствую, что не очень эффективно включать 750 КБ кода, когда, вероятно, 90% его не используется. Может быть, что iequals
Функция использует все это 750kB, я понятия не имею.
Опять же, если iequals
Функция включает в себя множество одинаковых библиотек, файл все равно будет таким же большим.
Мысли?
Спасибо заранее за любые советы.
РЕДАКТИРОВАТЬ:
Спасибо за ответы. Я делаю все возможное, чтобы понять их.
Я инженер-химик, который переписывает кучу ужасно медленных и плохо оптимизированных макросов VBA в C ++ DLL. Пока что результаты были выдающимися, и все работает правильно. Я просто не вижу необходимости в дополнительном размере файла, если мне нужно сделать только один тип сравнения между двумя строками.
Вот пример сравнения, которое мне нужно сделать:
if (SomeBSTR == "SomeTextHere") {
// do stuff
}
или точнее:
if (Gas == "Methane" or
Gas == "CH4" or
Gas == "C1") return 1;
if (Gas == "Ethane" or
Gas == "C2H6" or
Gas == "C2") return 2;
Если это единственный тип сравнения, который мне нужно сделать, могу ли я сделать это более простым способом, чем:
int wStrCmp(const BSTR Str1, const wstring Str2) {
wstring wStr1(Str1, SysStringLen(Str1));
return boost::iequals(Str1, Str2);
}
который вызывается через:
if (wStrCmp(Gas, L"Methane") or
wStrCmp(Gas, L"CH4") or
wStrCmp(Gas, L"C1")) return 1;
Эти последние 2 блока практически вставлены из моего кода.
Еще раз спасибо, ребята.
поверь мне, ты уже включил boost::algorithm::iequals
но это использовать boost::range
а также std::locale
что, возможно, вы не используете их в других местах вашего кода, так что это делает ваш код намного больше, так что я думаю, для вашего случая нет другого способа сделать это, если вы не используете какую-то нестандартную функцию, такую как stricmp
или же strcasecmp
,
Если вы хотите сравнить широкие строки в Windows (например, BSTR
) ты можешь использовать _wcsicmp
от ЭЛТ или lstrcmpiW
из среды выполнения Windows (объявлено в Kernel32.lib
что, возможно, вы уже связаны с этим).
Других решений пока нет …