компоновщик — могу ли я включить / импортировать одну функцию из библиотеки в Stack Overflow

Мне нужно только использовать 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 блока практически вставлены из моего кода.

Еще раз спасибо, ребята.

6

Решение

поверь мне, ты уже включил boost::algorithm::iequals но это использовать boost::range а также std::locale что, возможно, вы не используете их в других местах вашего кода, так что это делает ваш код намного больше, так что я думаю, для вашего случая нет другого способа сделать это, если вы не используете какую-то нестандартную функцию, такую ​​как stricmp или же strcasecmp,

Если вы хотите сравнить широкие строки в Windows (например, BSTR) ты можешь использовать _wcsicmp от ЭЛТ или lstrcmpiW из среды выполнения Windows (объявлено в Kernel32.lib что, возможно, вы уже связаны с этим).

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector