静态const类成员
static const class members
我有各种常量需要在整个程序中引用。我一直在使用静态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();
相关文章:
- 在运算符重载定义中使用成员函数(const错误)
- 如何在声明为 const 的方法中更改类成员
- 如何定义一个没有重复代码的继承的 const 类成员函数?
- 为什么我不能在返回 const 的布尔函数中为类成员变量赋值?C++
- 在类 (C++) 之外设置 const int 成员变量
- 不允许运算符 const 参数调用 const 成员函数
- 在 C++ 中声明 const 对象需要用户定义的默认构造函数.如果我有一个可变成员变量,为什么不呢?
- 有人可以用"显式运算符 const GUID_t&() const"来解释成员函数的函数吗?
- 无法使用类型 'const char *' 的左值初始化类型 'char *' 的成员子对象
- 在 C++ 中通过引用传递类成员时,Const 不起作用
- 我们可以有一个 setter 成员函数作为从 const 对象引用的 const 吗?
- 静态数据成员:它"const declaration / constexpr definition"起作用?
- 使用 const char* 初始化 const ref 字符串成员时幕后会发生什么
- c++ 是否保证标头初始化的静态 const 成员跨编译单元和库共享单个实例?
- 声明与 const 变量和成员函数相同的标识符
- 有效地初始化 const std::vector 类成员
- 为什么我可以调用一个从const方法更改成员的方法
- 成员函数的"this"参数具有"const"类型,但我的函数实际上不是"const"
- 在C++中,从构造函数中将字符串文本分配给成员const char*变量时会发生什么
- 在类声明中初始化 const 成员变量时在调试模式下出现异常