实现程序的配置设置时有什么好方法?

时间:2013-02-21 14:39:22

标签: c++ configuration singleton global-variables

假设您有一个程序应该从配置文件中读取程序的设置。你会用一个存储它们的单例类,一个具有每个设置的静态属性的类,一个名称空间内的全局变量来实现它们吗?或者更好的东西?

在我的情况下,我在命名空间中使用全局变量来实现它们,虽然我已经被教导从不使用全局变量,因为我已经读过Singleton模式现在被认为比它们更糟。

2 个答案:

答案 0 :(得分:3)

我会在一个单独的类或模块中实现它们(类似于boost.program_options),并通过依赖注入和参数值在代码库的其余部分传播它们。

如果这些值没有改变,你可以把它们放在(或者)一个选项文件中或作为默认参数值而忘记它们。

这将允许在不对代码库进行任何更改的情况下运行不同的默认值,并允许您在运行测试时使用不同的默认值/模拟数据。

答案 1 :(得分:0)

我会使用一个单例返回某种容器,其中包含配置程序所需的所有属性。 IMO只要单身没有内部状态,影响singelton成员的召唤,使用模式就没有问题。对于无状态,我的意思是对单例成员的调用应该始终产生相同的结果,使用给定的参数集,无论如何。这样就可以保证程序中不同位置的两个调用不会以不同的方式影响程序。