在c ++中保持配置设置的正确设计是什么?

时间:2009-03-12 05:29:26

标签: c++ configuration singleton

假设我有ini / json存储我的桌面应用程序的配置设置,是否可以在启动时加载所有属性的静态对象/何时需要它还是有其他更好的选择吗?

因为这是我第一次这样做,所以只是想知道静态对象是好还是单例模式还是别的什么会更好

4 个答案:

答案 0 :(得分:2)

无论哪种方式都没问题。

如果是我,我会在构建配置对象时使用它。

cConfig Config("config.ini");

此Config类将加载文件中的设置。任何代码都可以通过

访问设置
Config.Get("NumberOfFoobars")

出于可测试性目的,如果构造中没有文件,则将类的设置设置为默认值,或者创建一个日志文件,其中包含一条通知用户缺少设置的行。

然后对于需要配置的函数,我会将Config实例作为参数的一部分传递:

DoStuff(Config, [...]);

让DoStuff从Config类中获取变量。

这使得类可测试(你可以模拟Config类),可重命名(一目了然,你可以告诉哪个函数需要Configs)而且你不必依赖静态实例(如果你不这样做,单身就很危险知道如何使用它们。)

您可能对learn more about this

感兴趣

答案 1 :(得分:1)

我通常使用Boost.Program_options,我通常使用单身。

答案 2 :(得分:0)

如果用户要修改配置设置以确定应用程序的运行方式,那么将它保存在某个ini文件中可能会更好。有些用户喜欢直接编辑ini文件而不是通过GUI编辑。最好同时给出两种选择。
还有一些用户有多个ini文件,并在它们之间轮换,以便在那个时间点进行设置。

答案 3 :(得分:0)

在启动时(或第一次需要设置)加载所有设置将在大多数情况下工作,但用户必须重新启动应用程序才能使配置文件的任何编辑生效。对于大多数用户来说,这永远不会成为问题,但对于喜欢直接编辑配置文件的高级用户而言,这可能令人沮丧。在基于UNIX的操作系统上,可以处理SIGHUP信号,该信号已成为重新读取配置文件的可接受触发器。对于Windows,我没有类似的方法。另一种方法是跟踪配置文件的修改时间,以确定是否应该重新读取设置。