如何在不导入整个库的情况下用c ++导入函数

时间:2016-01-24 18:44:09

标签: c++

只是想知道我是否可以在不导入整个lib的情况下导入类似排序的东西?如果有可能请你解释一下如何这样做,如果没有,你能告诉我为什么吗?

3 个答案:

答案 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在评论中所说:

  

它是一个完全在头文件中实现的模板函数。你没有   “导入”任何库。