我正在努力实现以下目标。我想将一些系统信息存储在一组变量中。
说变量是:
std::string GPU;
std::string CPU;
std::string OS;
我希望这些变量具有全局范围,但仅用于读取(不应修改它们)。通常,对于这个,只需将const
附加到声明中。但是对于其中一些变量,我需要在main执行后在运行时找到信息。
因此,问题是我不能像通常那样简单地初始化它们,我需要等待一些处理才能设置它们。
总的来说,我需要通过一个函数对变量进行一次初始化,然后才能读取。
这是否可以实现?
答案 0 :(得分:1)
为什么不在结构的私有静态范围后隐藏所需的常量?在多线程环境中,您甚至可以添加条件变量并等待初始化。
struct globals {
static const std::string& GPU() {assert(is_inited_); return gpu_;}
static init(std::string GPU, ...) {gpu_ = std::move(GPU); ...; is_inited_ = true;}
private:
std::string gpu_;
std::string cpu_;
std::string os_;
book is_inited_;
};
int main() {
...
// initialize consts at some point
globals::init();
...
// access consts
globals::GPU();
}
// initial values
std::string globals::gpu_;
...
bool globals::is_inited_ = false;