【发布时间】:2012-10-26 18:47:04
【问题描述】:
我只需要使用 BOOST 库中的iequals 不区分大小写的字符串比较函数。
我正在使用#include <boost/algorithm/string.hpp> 来导入它。
有什么办法只能自己导入iequals函数吗?
我什至关心的原因(我真的只是好奇。)是因为如果我不 #include 它编译的 DLL 大约是 230kB,如果我这样做的话大约是 1.1MB。在这种特殊情况下,文件的大小并没有太大的区别,但似乎有很多东西被导入但从未使用过。如果库只有几 GB 而我只需要其中一个功能怎么办?我想这将成为一个问题。
当涉及到与 cpp 相关的任何事情时,我承认我很天真,但我觉得包含大约 750kB 的代码,而其中可能有 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;
最后两个块实际上是从我的代码中粘贴的。
再次感谢各位。
【问题讨论】:
-
您是否考虑过改用
strcasecmp(POSIX) 或_stricmp(Windows)?