一种读取配置属性的简单方法

时间:2013-08-12 16:52:27

标签: c++

我正在尝试为现有代码/项目添加一些可配置属性。我发现做这么多步骤真是太烦人了:

  1. 在配置文件中添加条目;
  2. 在h文件中声明一个键字符串;
  3. 在cpp文件中定义该键字符串;
  4. 在h文件中声明getXXX方法/函数;
  5. 在cpp文件中定义getXXX方法/函数;
  6. 在我们的例子中,该头文件和cpp文件仅用于从文本文件中读取的属性,并且仅在此模块中需要这些属性。因此,我们可以使用更少的文件或更少的步骤来简化它们。有什么想法/建议吗?

    修改

    地图用于保存文本文件中的内容。

    示例get方法喜欢这样:

    unsigned int Module1Config::getSleepTime()
    {
        return getPropertyMap().getUnsignedIntProperty(SLEEP_TIME_KEY);
    }
    

1 个答案:

答案 0 :(得分:0)

如果私有std::map的密钥只是在配置文件中声明的那些密钥呢?然后,你可以有一个getter函数,可以根据需要输入值,如果不存在则使用默认值:

template<class T>
T get(const std::string &key) const
{
  if the key is in the map,
    return its value converted to type T
  else
    return T();
}

您可能会发现有用的第二个函数可以告诉您是否声明了某个键:

bool exists(const std::string &key) const
{
  return true iif key is in the map
}

这种方法的优点是,在添加新属性时无需修改类。可以理解的是,键名不会在h文件中创建为常量标识符,因此您必须始终使用字符串,这可能容易出错。无论如何,我认为它的多功能性是值得的(这是我在我的程序中使用的方法)。