簡體   English   中英

在沒有全局變量的情況下在解耦的函數\\方法之間共享數據

[英]Sharing data between de-coupled functions\methods without globals

基本上,我需要兩個或多個函數,這些函數駐留在不同的源文件中,並且彼此之間不知道共享某些數據。 Globals將是一個即時解決方案,但普遍對此感到不滿意。 在這種情況下,難道它們是不可避免的嗎?

這是我需要使用全局變量做的簡化解釋:

在file1.c

int foo;

void change_foo()
{
  // Does some calculation to determine the new value of foo
  foo = ...
}

file2.c中

extern int foo;

void use_foo()
{
  // Does something with the value of foo
  // Is not aware of change_foo()'s existence so it can't call or be called from it
}

1)在這里如何消除對全局變量的需求? 使int foo靜態函數將立即將兩個函數耦合。 在main()中定義變量,然后在main()中調用這兩個函數對我來說不是一個選擇。

2)在像C ++這樣的OO語言中,是否存在更優雅的解決方案? 說來自兩個不同名稱空間的兩個方法需要共享數據。

3)我可以看到這個問題經常發生。 一個值得注意的例子是需要在兩個獨立的android活動之間共享資源或其他實體(不能以有意義的方式進行序列化)。 有沒有辦法使用全局變量(在此示例中為具有公共靜態字段的類)或單例這樣的設計模式?

一種可能性(我不建議這樣做)是映射一些內存,並且兩個函數都使用該映射的內存。 當無法在函數調用中將數據作為參數傳遞時,extern語句非常適合在文件之間訪問數據。 注意:全局變量應盡可能避免使用,因為它們是維護的噩夢,並且在不同執行線程同時訪問時需要互斥量(或類似變量)。

在C ++中,該變量可以與getter和putter訪問方法一起放在單例類中。 然后,每個文件都引用單例類。

在C語言中,數據可以是第三個文件的“文件靜態”文件,該文件包含用於獲取/放置變量的函數。 (這就是我要做的)然后,每個想要訪問變量的函數都可以在第三個文件中調用相應的函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM