gpt4 book ai didi

c++ - 我应该使用单个 header 来包含所有静态库 header 吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:21:22 25 4
gpt4 key购买 nike

我有一个用 C++ 构建的静态库。我把它分成许多头文件和源文件。我想知道是否最好将库的客户端可能需要的所有 header 包含在一个头文件中,然后他们可以将其包含在他们的源代码中,或者只让它们包含他们需要的 header ?这会导致代码不必要地臃肿吗?我不确定未使用的类或函数是否仍会编译到他们的产品中。

感谢您的帮助。

最佳答案

请记住,您编译的每个源文件都涉及编译器的独立调用。每次调用时,编译器都必须读入每个包含的头文件,对其进行解析,并建立一个符号表。

当您在许多源文件中使用其中一个“include the world”头文件时,它会显着影响您的构建时间。

有一些方法可以缓解这种情况;例如,Microsoft 有一个预编译头功能,它基本上保存了符号表以供后续编译使用。

不过还有另一个考虑因素。如果我要使用您的 WhizzoString 类,我就不必为 SOAP、OpenGL 和您拥有的东西安装 header 。事实上,我宁愿 WhizzoString.h 只包含作为公共(public)接口(interface)一部分的类型和符号的 header (即,作为您的用户需要的东西)类)。

您应该尽可能尝试将包含从 WhizzoString.h 转移到 WhizzoString.cpp:

确定:

// Only include the stuff needed for this class
#include "foo.h" // Foo class
#include "bar.h" // Bar class

public class WhizzoString
{
private Foo m_Foo;
private Bar * m_pBar;
.
.
.
}

更好:

// Only include the stuff needed by the users of this class
#include "foo.h" // Foo class

class Bar; // Forward declaration

public class WhizzoString
{
private Foo m_Foo;
private Bar * m_pBar;
.
.
.
}

如果您的类的用户永远不必创建或使用 Bar 类型,并且该类不包含 Bar 的任何实例,那么在头文件 (WhizzoString.h) 中仅提供 Bar 的前向声明可能就足够了。 cpp 将有 #include "bar.h")。这意味着包含 WhizzoString.h 的任何人都可以避免包含 Bar.h 及其包含的所有内容。

关于c++ - 我应该使用单个 header 来包含所有静态库 header 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2226927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com