静态const类成员

static const class members

本文关键字:成员 const 静态      更新时间:2023-10-16

我有各种常量需要在整个程序中引用。我一直在使用静态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类对象之前就已经初始化了。

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

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

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

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

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

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();
相关文章: