正确实施全局配置

2024-03-22

我的目标是在我正在开发的 C++ 游戏中拥有全局常量(以表示一些图形信息等)。我当前的实现是将它们全部放在 .h 中并将它们包含在各处。这是可行的,只是每次我更改设置时,都必须重新编译整个代码库。

所以,我的下一个想法是将它们放入一些配置 txt 文件中并解析它们,这样当设置更改时,代码实际上不会更改。解析器非常简单,我可以将值放入常量中,但由于解析器是一个代码块,因此常量不再是全局的。

有没有好的办法解决这个问题呢?也许有某种方法可以使它们成为全局的,尽管处于阻塞状态,或者有某种方法可以避免在更改设置时重新编译所有内容?


我用来解决这个问题的方法是将变量放在一个单独的全局命名空间中,该命名空间位于一个名为类似的头文件中config.h,然后在各处包含该文件。

// In config.h

#ifndef CONFIG_H
#define CONFIG_H

namespace config
{
    extern int some_config_int;
    extern std::string some_config_string;

    bool load_config_file();
}

#endif

然后在源文件中,您define变量并将它们设置为默认值。该源文件还包含从配置文件加载变量的代码。

// In config.cpp

namespace config
{
    int some_config_int = 123;
    std::string some_config_string = "foo";
}

bool config::load_config_file()
{
    // Code to load and set the configuration variables
}

现在,在每个源文件中,您需要配置变量,包括config.h并像这样访问它们config::some_config_int.

然而,没有“正确”的方法来解决这个问题,所有有效的方法在我看来都是正确的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

正确实施全局配置 的相关文章

  • Accept() 是线程安全的吗?

    我目前正在用 C 语言为我正在做的课程编写一个简单的网络服务器 我们的一项要求是实现一个线程池来使用 pthread 处理连接 我知道我将如何粗略地执行此操作 在主线程中调用accept并将文件描述符传递给freee线程 但是我的朋友建议了
  • 为什么 VB.NET 和 C# 中针对值检查 null 存在差异?

    In VB NET http en wikipedia org wiki Visual Basic NET有时候是这样的 Dim x As System Nullable Of Decimal Nothing Dim y As System
  • 如何使用 MVVM 更新 WPF 中编辑的数据? [复制]

    这个问题在这里已经有答案了 我正在为聊天应用程序构建 UI 设计 在尝试更新所选联系人的消息时遇到问题 选择现有联系人 选择编辑选项 然后编辑其属性 例如用户名和图像 后 唯一进行的更改是联系人的用户名和图像 我仍然想更改 MessageM
  • 键盘加速器在 UWP 应用中停止工作

    我正在尝试将键盘加速器添加到 UWP 应用程序中的 CommandBar 菜单项 当应用程序启动时 这工作正常 但在我第一次打开溢出菜单后 加速器停止工作 这似乎不会发生在主要命令 菜单之外 上 只有溢出菜单内的辅助命令才会发生 此外 单击
  • 静态类变量与外部变量相同,只是具有类作用域吗?

    在我看来 静态类变量与外部变量相同 因为你只需要declare它在static int x extern int x语句 并在其他地方实际定义它 通常在 cpp 文件中 静态类变量 h file class Foo static int x
  • 访问“if”语句之外的变量

    我怎样才能使insuranceCost以外可用if陈述 if this comboBox5 Text Third Party Fire and Theft double insuranceCost 1 在 if 语句之外定义它 double
  • 如何在不实例化一个类的情况下检查它是否继承了另一个类? [复制]

    这个问题在这里已经有答案了 假设我有一个如下所示的类 class Derived some inheritance stuff here 我想在我的代码中检查类似的内容 Derived is SomeType 但看起来像is运算符需要 De
  • Qt 计算和比较密码哈希

    目前正在 Qt 中为测验程序构建面向 Web 的身份验证服务 据我了解 在数据库中存储用户密码时 必须对其进行隐藏 以防落入坏人之手 流行的方法似乎是添加的过程Salt https en wikipedia org wiki Salt cr
  • 如何在 Asp.net Gridview 列中添加复选框单击事件

    我在 asp 中有一个 gridview 其中我添加了第一列作为复选框列 现在我想选择此列并获取该行的 id 值 但我不知道该怎么做 这是我的 Aspx 代码
  • 有没有办法使用 i387 fsqrt 指令获得正确的舍入?

    有没有办法使用 i387 fsqrt 指令获得正确的舍入 除了改变精确模式在 x87 控制字中 我知道这是可能的 但这不是一个合理的解决方案 因为它存在令人讨厌的重入型问题 如果 sqrt 操作中断 精度模式将出错 我正在处理的问题如下 x
  • 方法“xxx”不能是事件的方法,因为该类派生的类已经定义了该方法

    我有一个代码 public class Layout UserControl protected void DisplayX DisplayClicked object sender DisplayEventArgs e CurrentDi
  • 是否有像 gccxml 这样的用于生成包装器的 C 标头解析器工具?

    我需要为一种新的编程语言编写一些 C 标头包装器 并且想要类似 gccxml 的东西 但不完全依赖 gcc 以及它在 Windows 系统上带来的问题 只需要读C而不是C 只要有完整的文档记录 任何格式的输出都可以 Linux Solari
  • 我可以仅在少数情况下关闭模拟吗

    我有一个始终使用模拟的应用程序 但是 当用户以管理员身份登录时 一些操作需要他们写入服务器本身 现在 如果这些用户在实际服务器上没有权限 有些用户没有 则不会让他们写入 我想做的是关闭几个命令的模拟 有没有办法做这样的事情 using Ho
  • 在VisualStudio DTE中,如何获取ActiveDocument的内容?

    我正在 VisualStudio 中编写脚本 并尝试获取当前 ActiveDocument 的内容 这是我当前的解决方案 var visualStudio new API VisualStudio 2010 var vsDTE visual
  • 设计 Javascript 前端 <-> C++ 后端通信

    在我最近的将来 我将不得不制作一个具有 C 后端和 Web 前端的系统 要求 目前 我对此了解不多 我认为前端将触发数据传输 而不是后端 所以不需要类似 Comet 的东西 由于在该领域的经验可能很少 我非常感谢您对我所做的设计决策的评论
  • 在 C++ 和 Windows 中使用 XmlRpc

    我需要在 Windows 平台上使用 C 中的 XmlRpc 尽管我的朋友向我保证 XmlRpc 是一种 广泛可用的标准技术 但可用的库并不多 事实上 我只找到一个库可以在 Windows 上执行此操作 另外一个库声称 您必须做很多工作才能
  • 从有符号字符转换为无符号字符然后再转换回来?

    我正在使用 JNI 并有一个 jbyte 类型的数组 其中 jbyte 表示为有符号字符 即范围从 128 到 127 jbyte 表示图像像素 对于图像处理 我们通常希望像素分量的范围为0到255 因此 我想将jbyte值转换为0到255
  • 如何设置 CMake 与 clang 交叉编译 Windows 上的 ARM 嵌入式系统?

    我正在尝试生成 Ninja makefile 以使用 Clang 为 ARM Cortex A5 CPU 交叉编译 C 项目 我为 CMake 创建了一个工具链文件 但似乎存在错误或缺少一些我无法找到的东西 当使用下面的工具链文件调用 CM
  • 启动画面后主窗口出现在其他窗口后面

    我有一个带有启动屏幕的 Windows 窗体应用程序 当我运行该应用程序时 启动屏幕显示正常 消失并加载应用程序的主窗体 但是 当我加载主窗体时 它出现在包含该应用程序的 Windows 资源管理器目录下 这是运行启动画面然后运行主窗体的代
  • FindAsync 很慢,但是延迟加载很快

    在我的代码中 我曾经使用加载相关实体await FindAsync 希望我能更好地遵守 C 异步指南 var activeTemplate await exec DbContext FormTemplates FindAsync exec

随机推荐

  • 以编程方式格式化谷歌图表

    使用以下代码如何设置格式以便CurrencyValue1和CurrencyValue2在图表中显示为美元 作为货币值 function drawChart var data new google visualization DataTabl
  • 在 PictureBox 上绘制折线

    我想在以下位置绘制折线 由一条或多条线段组成的连续线 PictureBox 在这里 我们可以通过指定每个线段的端点来创建多条线 并计算每个线段的距离 即每条线的距离 如果您想在图片框上执行此操作 最简单的方法是从PictureBox并提供当
  • 以编程方式从我的 java webapp 读取静态资源 [重复]

    这个问题在这里已经有答案了 目前 我的 war 文件中有一堆图像 如下所示 WAR ROOT WEB INF IMAGES image1 jpg image2 jpg index html 当我通过 servlet jsp etc 生成 h
  • Firebase-perf 与 let 插件冲突

    最近 我们被要求在 Android 应用程序上实现 Firebase 性能监控 但它给我们带来了许多不同的问题 该应用程序曾经工作得很好 但是在添加 firebase perf 后 它可以编译 但在运行时我们发现让插件 https gith
  • 在 Javascript/jQuery 中解码 base64 文件以供下载

    今天我一直在尝试 SQL 二进制对象 我首先将图像存储在表中 发出 AJAX 请求以对图像进行 Base64 编码 然后使用 来显示它 img src 图像显示良好 我正在从事的网络项目也需要文件下载 主要是 PDF 太棒了 我想 我也将
  • 无法创建新的雅虎应用程序

    这个链接过去一直很挑剔 现在似乎完全失效了 https developer yahoo com apps create https developer yahoo com apps create 是不是不能再创建 Yahoo 应用程序了 N
  • PHPhotoLibrary.requestAuthorization() 在 iOS 9 上不触发授权提示

    我有以下功能 显示带有两个不同选项的操作表 目前 唯一实施的选项是标题为 照片 的选项 正确呈现操作表并调用正确的操作 我的问题是 在模拟器和实际设备上 我无法显示请求访问照片库的提示 PHPhotoLibrary authorizatio
  • 由于行高与垂直对齐冲突,文本被截断:顶部

    我有一个表格 其中包含一个表格内格式类似于文本的提交按钮 一般情况下 所有表行都设置为vertical align top 如果我不对格式化文本应用行高 则其底部部分将被切断 如以下字母所示p q等等 小提琴的底部 如果我确实将其应用行高
  • Xcode 12 - 下载更多模拟器运行时为空

    I can t add more simulator OS version in XCode 12 for example iOS 13 the list is empty 如何添加更多不同ios版本的模拟器 我遇到了完全相同的问题 苹果返
  • 以 cweb 或 noweb 样式导出代码块名称?

    在 Org 模式下编写 Lite 程序时 导出类似于在早期的 Lite 编程工具 例如 cweb 或 noweb 中编织 这些工具会将代码块名称添加到编织 导出 输出中 在组织模式下 它看起来像这样 组织文件 NAME mycodebloc
  • Firestore.firestore() 失败并显示“类型‘Firestore’没有成员‘firestore’”

    我正在尝试为我的 Firestore 设置数据库 但是我尝试重新安装 Pod 和许多其他东西 但我仍然无法让它工作 因为它显示了以下错误 Type Firestore has no member firebase 我不知道为什么会这样 因为
  • Javascript 保持 div 隐藏,直到您单击按钮,需要帮助修改

    基本上 我的代码现在隐藏了我网站上的一些 div 然后当您单击链接时 它会使 div 出现 我需要帮助 以便当我单击一个链接时出现一个 div 然后单击另一个链接时 前一个链接会消失 假设我点击 关于 链接 div 出现了 很好 然后我点击
  • 汇编中的蛇,使用什么数据结构?

    我对汇编完全陌生 不管你信不信 我们的第一个任务是在汇编中创建蛇 我应该如何储存蛇 我应该把它放在堆栈中 还是应该将它放入某个寄存器中 我已经对这种 可怕的 语言进行了大约 3 天的研究 但无法找到一个好的开始方法 我可能会在 c 中使用某
  • 如何用Java读取.EXE文件的内容

    在 Java 中读取可执行文件有哪些可能的选项和最合适的选项 我想生成 exe 文件的十六进制表示形式 我正在考虑以二进制方式读取文件 然后进行转换 但是我怎样才能读取 exe呢 1 以字节形式读取文件 使用 BufferedInputSt
  • 在单个 RecyclerView 中使用来自 Firestore 和 Firebase RTDB 的数据

    我有一个 RecyclerView 它由存储在 Firestore 数据库中的帖子填充 每个帖子都被编写为具有唯一 postID 的文档 存储发布的消息 时间戳和点赞计数器 mUploads is defined as private Li
  • 如何解析 C# 的命令行输出?

    我想从 C 执行一个应用程序 命令行应用程序 并且我想在执行该应用程序并向其提供输入后 我想解析将产生它的输出 因为 它会输出很多东西 而我想从中获取我需要的东西 我怎样才能做到这一点 我怎样才能得到c 中的输出 然后只从中获取我需要的东西
  • Tensorflow:计算关于高阶张量的 Hessian 矩阵(仅对角部分)

    我想计算我指定的损失相对于 vgg16 conv4 3 层内核 3x3x512x512 维矩阵 的每个特征图的一阶和二阶导数 Hessian 的对角部分 如果根据以下公式尊重低阶导数 我知道如何计算导数如何在Tensorflow中计算所有二
  • commitHandler 和 .validate() 问题

    最近我在将文件附加到电子邮件中时遇到问题 我处理了这个问题 顺便说一句 谢谢你们 现在我遇到了与 固定 附加文件有关的下一个问题 其实问题比我想象的还要多 1 在下面的代码中 在验证插件中 我认为调用类似 名称 必需 的规则就足够了 但事实
  • Coq 中 MSet 的使用示例

    MSets https coq inria fr library Coq MSets MSets html似乎是 OCaml 式有限集的最佳选择 可悲的是 我找不到示例用途 如何定义一个空的MSet或单身人士MSet 我怎样才能结合两个MS
  • 正确实施全局配置

    我的目标是在我正在开发的 C 游戏中拥有全局常量 以表示一些图形信息等 我当前的实现是将它们全部放在 h 中并将它们包含在各处 这是可行的 只是每次我更改设置时 都必须重新编译整个代码库 所以 我的下一个想法是将它们放入一些配置 txt 文