我可以从C 中的库中包括/导入单个函数吗?

Can I include/import a single function from a library in C++

本文关键字:单个 导入 函数 包括 我可以      更新时间:2023-10-16

我只需要使用boost库中的 iequals case-case-nistimentive string string函数。

我正在使用 #include <boost/algorithm/string.hpp>导入它。

有什么办法可以单独导入iequals函数?

我什至关心的原因(我真的很好奇。)是因为如果我不 #include,则编译的dll约为230kb,如果我这样做,则约为1.1MB。在这种特殊情况下,文件的大小并没有太大影响,但是似乎有很多东西被导入并且从未使用过。如果图书馆是几个GB,我只需要其中一个功能怎么办?我想,这将成为一个问题。

当涉及到CPP相关的任何内容时,我很天真,但是当可能没有使用90%的90%时,我觉得在其中包括750kb的代码效率不是很有效。可能是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);
}

被称为via:

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

最后2个块实际上是从我的代码粘贴的。

再次感谢,伙计。

相信我,您已经包括boost::algorithm::iequals,但是它使用boost::rangestd::locale,您可能不会在代码的其他地方使用它们,因此这会使您的代码更大,所以我猜猜您的情况没有其他方法可以做到这一点,除非您使用某些非标准功能,例如stricmpstrcasecmp

如果要比较Windows上的宽字符串(例如BSTR),可以从CRT中使用_wcsicmp或Windows Runtime中的lstrcmpiW(在Kernel32.lib中声明,可能已经与之链接了)。

>