只是想知道我是否可以在不导入整个lib的情况下导入类似排序的东西?如果有可能请你解释一下如何这样做,如果没有,你能告诉我为什么吗?
答案 0 :(得分:2)
假设函数首先在库中(而不仅仅是头文件实现),那么链接到该库应该只引入你正在使用的函数[当然包括那些函数]在内部使用]。因此,没有理由避免与提供所需内容的库链接。
当然,实施可能很愚蠢,并且使用了许多您根本不需要的功能,但这是一个单独的问题。
对于模板函数(在几乎每个当前编译器中,都要在头文件中实现),要求是包含适当的头文件。
答案 1 :(得分:2)
目前,您无法从标题中导入单个函数,只能#include
整个标题。虽然您不需要包含整个标准库以使用std::sort()
,但您需要#include <algorithm>
,并且扩展名包括所有算法。但是,编译器通常足够聪明,只能将您使用的库成员放入可执行文件中;例如,如果您使用std::copy()
的唯一成员是<algorithm>
,则不可能将std::sort()
编译到您的程序中。
C ++可能会在未来获得此功能。他们正在考虑的C ++ 17标准之一就是模块,从理论上讲它可以实现类似于你想要的功能(我相信)。虽然它们目前似乎并没有真正进入C ++ 17,但它们仍然可以作为技术规范发布,如果它们可行的话,大多数主要编译器可能会尝试合并。
答案 2 :(得分:0)
如果你的意思是通过lib构建的静态库的windows .lib输出。答案是不。没有另一个,你不能链接到它的一部分。但是,如果您拥有完整的来源,是的,您可以做一些技巧并清理不必要的部分,然后再次构建它并链接到它。
修改强>
我刚刚注意到这个词。如果它真的是std::sort
,那么你就误解了一些东西。就像Igor在评论中所说:
它是一个完全在头文件中实现的模板函数。你没有 “导入”任何库。