gpt4 book ai didi

c++ - 大型项目的头部防护装置

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

我了解头部防护是什么,但我从未见过它在更大的项目中是如何使用的。我目前正在编写一个 OpenGL 抽象层,我主要需要包含相同的文件。

所以我第一个天真的方法是做这样的事情:

#ifndef GUARD_H
#define GUARD_H

#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtc/type_ptr.hpp>

#include <GL/glfw3.h>

#include <glload/gl_core.h>
#include <glload/gll.h>

#endif // GUARD_H

所以我可以做 #include "guard.h" .但我意识到这不是一个很好的解决方案,因为如果我想添加一个简单的包含怎么办?

是的,我可能会在这个文件中写下我所有的包含,但我也不确定这是否是个好主意。

你会建议我如何构建我的头球后卫?你能给我推荐任何资源吗?

更新一:小例子

test.h

#ifndef TEST_H
#define TEST_H

#include <glm/glm.hpp>
class test{
};

#endif

test1.h
#ifndef TEST1_H
#define TEST1_H

#include <glm/glm.hpp>
class test1{
};

#endif

现在我在我的测试类中加入了 glm。但是如果我想做这样的事情怎么办。

#include "test.h"
#include "test1.h"
int main(){
//...
}

我不包括#include <glm/glm.hpp>吗?主要是 2 次?

最佳答案

所有包含在一个文件中不是一个好主意,除非您总是包含所有那些文件。

您应该只在您自己的 header 中包含严格最少的必需 header ,并将其余部分直接包含在您的 .cpp 中。源文件。

您的每个 header 都应该有一个独特的 header 保护,并且不会与任何其他库冲突,因此请非常注意命名方案。

您也可以考虑使用非标准 #pragma once 指令,如果您不编写可移植代码。

你可以看看this paper about the best practice for designing header files

回答您的编辑:

不,你不包括<glm/glm.hpp>两次,因为它本身就有一个头球后卫。但只有当您确实需要glm.hpp 时才应该包含它。在你的标题中,否则你应该稍后包含它。请注意,您通常可以通过 forward-declaring 避免包含你需要什么,这可以加快编译速度并避免循环依赖,但这是另一个问题。

关于c++ - 大型项目的头部防护装置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16609352/

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