在没有全局变量的解耦函数\方法之间共享数据

时间:2015-03-28 15:43:39

标签: c++ c global-variables

基本上我需要的是两个或多个函数,这些函数驻留在不同的源文件中,并且无法相互了解以共享某些数据。 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活动之间共享资源或某些其他实体(无法以有意义的方式进行序列化)。有没有办法使用全局变量(本例中带有公共静态字段的类)或单例设计模式?

1 个答案:

答案 0 :(得分:1)

一种可能性(我不推荐它)是映射一些内存,两个函数都使用映射内存。当数据无法作为函数调用中的参数传递时,extern语句非常适合访问文件之间的数据。警告:应尽可能避免使用全局变量,因为它们是维护的噩梦,并且在被不同的执行线程同时访问时需要互斥(或类似)。

在C ++中,变量可以放在单例类中,还有getter和putter访问方法。然后每个文件引用单例类。

在C中,数据可以是文件静态的'到第三个文件,其中该文件包含获取/放置变量的函数。 (这就是我要做的)然后每个想要访问变量的函数都可以调用第三个文件中的相应函数。