- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我了解头部防护是什么,但我从未见过它在更大的项目中是如何使用的。我目前正在编写一个 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/
我的印象是 header guards 解决了重新定义的问题。我收到链接器错误,指出 .obj 文件中存在重新定义。这是我包含的 header ,问题在于所有全局声明的重新定义。 #ifndef DI
我正在 Microsoft Azure 中运行企业级应用程序。我想知道 Microsoft Azure 中 DDOS 投影的建议是什么。该文档明确指出该平台受到 DDOS 保护,但没有提供更多详细信息
我正在用 laravel sanctum 进行测试,但这里有一些问题.. 我正在创建管理员守卫。 当我将中间件更改为 auth:sanctum_admin .. 它应该只能由管理员访问,但在这里我可以
我有一个带有延迟加载模块的 Angular 4.3.6 应用程序。这是部分根路由器: const routes: Routes = [ { path: '', redirectTo: 'fleet
我有 Vaadin UI 的后端。我想保护后端数据库免受XSS攻击。对于 Vaadin UI 的 XSS 防护,您有何建议? 最佳答案 Vaadin 内置了 XSS 保护。所有组件都正确转义/编码 h
我正在尝试提高我的应用程序的安全性。每当我从用户(无论是通过 POST 还是 GET)接收到应该是整数的数据时,我都会适本地对其进行验证。但通常数据是 VARCHAR,有时可以包含 HTML。 在这种
我有一个具有此功能的服务,它会在 token 有效或无效时返回 true 或 false loggedIn() { return this.http.get('http://localhost:300
我们的应用程序中有几条路线,用户不应通过直接在浏览器的地址栏中输入网址来导航这些路线。 相反,当我们使用 router.navigate() 通过我们的应用程序逻辑以编程方式导航时,我们只想让它们可访
我通常在 .NET 中编写我的 SQL sql.Append("SELECT id, code, email FROM mytable WHERE variable = @variable "); 然
我需要同时将多行(1000 行)插入到 SQL Server 数据库中。我认为最好的方法是使用 SqlBulkCopy 但我不确定如何参数化插入查询以防止 SQL 注入(inject)。 你能帮我一下
Laravel 5.7 PHP 7.2.10 目前我可以使用 Web 和 api 防护中的任何一个,是否有任何方法可以同时允许两者,以便 Web 应用程序和 api 能够协同工作。 类似的东西 ret
Guard 总是因为这个问题而困扰我: .../gems/bundler-1.6.2/lib/bundler/runtime.rb:34:in `block in setup': You have a
我正在尝试通过 gmail api 从 Google 获取邮件 在收到 token 后对 Google_Client 进行身份验证时出现此错误 fatal error :未捕获异常“Google_Au
我是一名优秀的程序员,十分优秀!