繁体   English   中英

如何在C ++中创建全局变量的多个实例

[英]How to make multiple instances of global variables in C++

问题标题可能很难理解,但是下面是我的问题:

我是C ++的新手,正在开发一个使用全局变量简化程序的程序。 (我知道它们通常很糟糕,但是我敢肯定,任何其他选择都会变得更糟。)我知道有很多方法可以使诸如全局变量之类的事情产生。 我的问题是该程序的功能之一是,在某些情况下,整个程序可能有(几乎)多个线程。 这些线程中的每一个都需要它们自己的这些全局变量实例。 因此,我的问题是,要创建可以创建多个实例的某种全局变量,我需要做哪种类型的事情? 我不在乎它会如何制作。 我希望所有全局变量的名称(例如名称空间)都是全局的,以防止名称意外冲突,但这不是必需的。

我曾经考虑过使用存储所有值的类的实例,但是我想不出一种简单的方法来使所有不同的文件/函数都可以轻松访问它。

提前致谢!

您应该能够为此使用本地线程,每个线程都有其自己的实例。

thread_local int foo = 0;

https://zh.wikipedia.org/wiki/Thread-local_storage#C_and_C.2B.2B

您可能具有多个实例函数的Singleton:

struct GlobalVariables {
  int var1;
  int var2;
  static GlobalVariables& instance1(){
    static GlobalVariables instance;
    return instance
  }
  static GlobalVariables& instance2(){
    static GlobalVariables instance;
    return instance
  }
};

int main(){
  auto& vars1 = GlobalVariables::instance1();
  vars1.var1 = 42;
} 

也许您可以考虑为每个全局变量使用一个映射结构,其中线程ID将用作键。

例如,如果您希望每个线程都拥有自己的实例:

int foo

然后,您可以创建一个地图,而不是创建上面的全局“ foo”:

map<size_t, int> foo

并且每个线程都将这样写入foo的“它自己的实例”:

foo[std::this_thread::get_id().hash()] = foo_value_for_this_thread 

并这样阅读:

foo_value_for_this_thread = foo[std::this_thread::get_id().hash()]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM