gpt4 book ai didi

C++,删除类头中的#include 或#include

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:52:27 24 4
gpt4 key购买 nike

如果可能的话,我想从我的类头文件中删除 的包含。 string和vector都是在头文件中声明的函数的返回类型。

我希望我能做这样的事情:

namespace std {
template <class T>
class vector;
}

然后,在 header 中声明 vector 并将其包含在源文件中。

是否有涵盖必须包含在 header 中的情况以及可以将包含内容拉入源文件的情况的引用?

最佳答案

你不能安全地转发声明 STL 模板,至少如果你想以可移植和安全的方式进行。该标准清楚地说明了每个 STL 元素的最低要求,但为可能添加额外模板参数的实现扩展留出了空间,只要它们具有默认值。也就是说:标准规定 std::vector 是一个模板,它至少需要 2 个参数(类型和分配器),但在符合标准的实现中可以有任意数量的额外参数。

不包括字符串和 vector header 有什么意义?当然,无论谁要使用您的类,都必须已经包含它,因为它在您的界面上。

当您询问决定何时包含以及何时转发声明的引用时,我的建议是:包含接口(interface)的所有内容,转发声明内部细节。

除了普通编译性能之外,这里还有更多问题。如果您将公共(public)(或 protected )接口(interface)中的类型的包含推送到 header 之外,您将根据包含的顺序创建依赖项。用户必须知道在包含您的 header 之前他们必须包含 string,因此您让他们又多了一件需要担心的事情。

实现文件中应包含哪些内容:实现细节、记录器、不影响接口(interface)的元素(数据库连接器、文件头)、内部实现细节(即,在实现中使用 STL 算法不会影响您的接口(interface),为简单目的而创建的仿函数,实用程序...)

关于C++,删除类头中的#include<vector> 或#include<string>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/920731/

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