6

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

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

有什么办法只能自己导入iequals函数吗?

我什至关心的原因(我真的只是好奇。)是因为如果我不这样做,编译的 DLL 大约为 230kB,如果我这样做#include,大约为 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; 

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

再次感谢各位。

4

1 回答 1

2

相信我,您已经包含boost::algorithm::iequals但它使用了boost::range,并且std::locale可能您不会在代码的其他地方使用它们,所以这会使您的代码变得更大,所以我想对于您的情况,除非您这样做,否则没有其他方法可以做到这一点使用一些非标准函数,如stricmpor strcasecmp

如果您想在 Windows 上比较宽字符串(例如BSTR),您可以使用_wcsicmpCRT 或lstrcmpiWWindows 运行时(声明Kernel32.lib可能您已经与它链接)。

于 2012-10-26T18:54:29.870 回答