c – 如何创建全局参数对象

这是一项常见而简单的任务:从配置文件中读取配置设置,将设置(例如,作为哈希)保存在对象中,从需要访问配置参数的各种对象访问此对象.

我找到了this implementation用于ConfigFile类的实现,它可以工作.我的问题是:什么是从我的其他类提供此类的实例并且是线程安全的最佳方法,避免静态初始化命令惨败等.

我目前的方法是使用main()构造它

// Read face detection related parameter values from the configuration file.
string configFileName = "detection_parameters.txt";
try {
    parameters = ConfigFile( configFileName );
}
catch(ConfigFile::file_not_found) {
    cerr << "configuration file not found: " << configFileName << endl;
    exit(-1);
}

然后使参数成为全局变量.但我也读到应该使用单例而不是全局变量.如何使用文件名实例化单例?

这一定是一项普遍的任务,我认为必须有一个普遍接受的好方法吗?如果有人能指出我,我将不胜感激.

谢谢,
C

解决方法

如果您要自己动手,我建议您使用Singleton设计模式进行配置.
让类本身存储一个自己类型的静态指针,构造函数是私有的,因此人们将被迫使用静态getter来获取类的一个实例.

所以一个模拟(可能无法编译,缺少有趣的Config功能,但应该说明一点)

class Config
{
public:
   static Config * getConfig();
   static void setConfigFileName(string filename);
private:
   Config();
   static string m_filename;
   static Config * m_configInstance;
};

如果我不清楚,getConfig()将查看m_configInstance.如果它不是有效的,那么它将创建一个(可以访问私有构造函数)并将其存储在m_configInstance中,这样每个后续调用都将访问同一个调用.

所以你的main()将使用setConfigFileName(),然后任何类只需要调用Config :: getConfig()然后调用它上面的操作.比标准的全局变量更清洁.

爆炸 – 在我写这篇文章的时候,其他人也提出了单身设计模式.好吧 – 希望额外的解释有所帮助.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...