将全局变量定义为哈希

时间:2011-10-20 13:56:32

标签: c++

我有许多C ++类,很多(不是全部)共享两个“静态大小变量”,例如

share.h

/*Other variables in this header used by all classes*/

static size width=10;//Used by about 60%

static size height = 12;//used by about 60%

因此,我将它们与所有类共享的其他对象一起放在头文件中。

当我编译项目时,我收到很多警告(来自不使用这些的类),抱怨它们被定义而不被使用。但我在那里需要他们!

所以我问,有没有办法对这些进行散列以防止出现此类警告?

将它们哈希以便定义它们!防止来自调用此头文件的类的警告不需要这两个最后两个变量,但是他们调用头文件因为他们需要其他所有init

2 个答案:

答案 0 :(得分:2)

<子> <击> 编辑阅读tune2fs的回答,我意识到我可能已经错误地解释了这个问题。

<击>

也许您忘了在头文件中使用extern?如果您只在头文件 中包含static个定义,则所有编辑单元都将具有唯一副本,而不是共享。另见this explanation of static/extern

修改在评论中消除歧义


 static SomeClass NotUnusedInstance;


 static void unused_vars_helper()
 {
      static SomeClass* take_address = &NotUnusedInstance;
 }

这种方法的设计影响最小(不调用任何实际代码; take_address 实际初始化 p>

这应该适合您的情况。您可以使unused_vars_helper()静态和/或在匿名命名空间内移动它,以防止帮助程序的外部可见性。

答案 1 :(得分:2)

您应该将它们放在单独的头文件中。所以你只能将它包含在他们需要的类中。这避免了其他类中的警告。所以最后你将有两个头文件。其中包括所有类的东西,另一个定义了未使用的变量。

但是尽量避免使用全局变量。