簡體   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