我可以从C 中的库中包括/导入单个函数吗?
Can I include/import a single function from a library in C++
我只需要使用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::range
和std::locale
,您可能不会在代码的其他地方使用它们,因此这会使您的代码更大,所以我猜猜您的情况没有其他方法可以做到这一点,除非您使用某些非标准功能,例如stricmp
或strcasecmp
。
如果要比较Windows上的宽字符串(例如BSTR
),可以从CRT中使用_wcsicmp
或Windows Runtime中的lstrcmpiW
(在Kernel32.lib
中声明,可能已经与之链接了)。
- 尝试导入pybind-opencv模块时出现libgtk错误
- 导入库可以跨dll版本工作吗
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 建议在运行时将带有类实例的列表从c++导入qml
- 导入/导出变量时出错
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 将QT项目导入Visual Studio 2019会给我带来很多LNK2001错误
- 是否可以将函数导入命名空间,但不能导出它?
- Eclipse CDT:单个项目中有多个C++文件
- 如何将 CLion C++ 项目导入 Visual Studio?
- Python 3.8 不能与 Pybind11 一起导入 [Windows]
- 为什么我们将单个或多维数组的大小声明为常量值?
- 无法将标准库导入本机 android 项目中的头文件
- C++调用具有 *this 属性的单个帮助程序函数
- 尝试了解在导入的静态方法上使用删除方法时的错误
- 如何读取单个字符并在输入两个字符序列时输出? 使用 while 循环和C++
- 在 python 模块中导入子模块时PyImport_Import失败
- 我可以从C 中的库中包括/导入单个函数吗?
- 在ios objective-c项目中导入、使用和编译单个c++头文件