6

我需要在整个程序中引用各种常量。我一直在使用静态 const 类成员,而不是使用全局变量:

class Human
{
public:
    static const int HANDS = 2;
    static const int FINGERS = 10;
};

问题是我需要从 XML 数据文件中读取值。我知道我可以用一个函数初始化一个静态成员:

const int Human::HANDS = ReadDataFromFile();

由于只能在同一个编译单元中预测初始化的顺序,所以我必须将它们全部定义在同一个 CPP 文件中。这不是一个真正的问题,但它会有点混乱。

真正的问题是,我的 ReadDataFromFile() 函数中的所有内容都需要在我的代码有机会运行之前准备好使用。例如,我有一个 XML 类,它通常处理从文件中读取 XML 数据。但是,在这种情况下我不能使用它,因为静态成员在我的 XML 类对象构建之前就已经初始化了。

除了随处可见的随机全局变量之外,还有更好的方法来组织常量吗?

4

2 回答 2

5

当您尝试初始化变量时,您需要读取您的 XML 文件。static但是,您可以使用函数内的对象来获取它:

XMLData const& access_config_file() {
    static XMLData data = readXMLData();
    return data;
}

然后,您可以access_config_file()从需要访问它的任何地方引用并提取值。变量在第static一次调用函数时被初始化。

于 2012-10-15T21:54:02.543 回答
3

使您的 XML 类对象也成为此类中的静态成员。IE,

class Human
{
public:
    static XMLReader x;
    static const int HANDS;
    static const int FINGERS;
};

然后在实现文件中,提供这些静态成员的定义,即

XMLReader Human::x();
const int Human::HANDS= x.ReadDataFromFile();
const int Human::FINGERS =x.ReadDataFromFile();
于 2012-10-15T22:17:02.983 回答