我可以在C ++中包含/导入库中的单个函数

时间:2012-10-26 18:47:04

标签: c++ linker g++ binutils

我只需要使用BOOST库中的iequals不区分大小写的字符串比较函数。

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

我有什么方法可以自行导入iequals函数吗?

我甚至关心的原因(我真的很好奇。)是因为如果我没有#include,编译后的DLL大约是230kB,如果我这样做的话,大约是1.1MB。在这种特殊情况下,文件的大小并没有多大差别,但似乎有很多东西被导入并且从未使用过。如果库是几GB而我只需要其中一个功能怎么办?那么它会成为一个问题,我想。

当谈到与cpp相关的任何事情时,我确实天真,但我觉得在不使用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);
}

通过以下方式调用:

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

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

再次感谢,伙计们。

1 个答案:

答案 0 :(得分:2)

相信我你已经包含boost::algorithm::iequals,但它使用了boost::rangestd::locale可能你不会在代码的其他地方使用它们,所以这会让你的代码变得很多更大,所以我想你的情况除非你使用像stricmpstrcasecmp之类的非标准函数,否则没有别的方法可以做到这一点。

如果要在Windows上比较宽字符串(例如BSTR),可以使用CRT中的_wcsicmp或Windows运行时中的lstrcmpiW(可能在Kernel32.lib中声明)你已经与它联系了。)