如何在运行时设置常量配置参数

时间:2018-04-16 22:42:48

标签: c++ initialization global-variables

我正在努力实现以下目标。我想将一些系统信息存储在一组变量中。

说变量是:

std::string GPU;
std::string CPU;
std::string OS;

我希望这些变量具有全局范围,但仅用于读取(不应修改它们)。通常,对于这个,只需将const附加到声明中。但是对于其中一些变量,我需要在main执行后在运行时找到信息。

因此,问题是我不能像通常那样简单地初始化它们,我需要等待一些处理才能设置它们。

总的来说,我需要通过一个函数对变量进行一次初始化,然后才能读取。

这是否可以实现?

1 个答案:

答案 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;