Могу ли я включить / импортировать одну функцию из библиотеки на C++

мне нужно использовать iequals функция сравнения строк без учета регистра из библиотеки BOOST.

я использую #include <boost/algorithm/string.hpp> чтобы импортировать его.

есть ли способ, которым я мог бы импортировать только iequals функция сама по себе?

причина, по которой я даже забочусь (мне действительно просто любопытно.) потому что скомпилированная DLL составляет около 230kB, если я не #include это и около 1.1 MB, если я это сделаю. В этом конкретном случае не имеет большого значения, насколько велика файл есть, но кажется, что есть много вещей, которые импортируются и никогда не используются. Что делать, если библиотека была несколько ГБ, и мне нужна была только одна из функций? Тогда это станет проблемой, я полагаю.

я, по общему признанию, наивен, когда дело доходит до всего, что связано с cpp, но я чувствую, что не очень эффективно включать некоторые 750kB кода, когда, вероятно, 90% его не используется. Возможно, что iequals функция использует все это 750kB, у меня нет идея.

опять же, если iequals функция включает в себя многие из тех же библиотек, файл по-прежнему будет таким же большим.

мысли?

заранее спасибо за любые советы.

EDIT:

Спасибо за ответы. Я стараюсь их понять.

Я Инженер-химик, который переписывает кучу ужасно медленных и плохо оптимизированных макросов VBA в DLL C++. До сих пор результаты были выдающийся и все работает правильно. Я просто не вижу необходимости лишний размер, если мне нужен только один тип сравнения между двумя строками.

пример сравнения, которое мне нужно сделать, выглядит следующим образом:

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);
}

, которая называется via:

if (wStrCmp(Gas, L"Methane")      or
    wStrCmp(Gas, L"CH4")          or
    wStrCmp(Gas, L"C1"))          return 1; 

эти последние 2 блока практически вставлены из моего кода.

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

1 ответов


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

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