我编写了一个非常广泛的框架,可以在物理模拟中驱动角色。即使每个人都警告我不要这样做,我使用全球公共数据结构来存储信息,并称之为State。它也不在命名空间中。我通过声明外部状态来使全局可访问;我这样做的原因是因为在应用程序的任何地方都需要这个结构,我发现只包含我的State.h非常方便,然后在任何地方写入state.var并在任何地方读取state.var。框架也在快速变化,我也感到很舒服,在引入新组件时不必关心传递数据,同步等。
无论如何,现在s ***击中了粉丝。我想使用Qt的GUI类之一,它已经拥有了自己的成员状态State状态。它们的状态至少在命名空间中,但它似乎并不重要,因为在类中我已经在使用该命名空间。
我现在能做什么?
答案 0 :(得分:6)
你唯一的选择是撕掉你的全局并用理智的东西取而代之。这是非常痛苦的,但你真的没有任何其他选择。这就是为什么人们建议不要首先使用一个。
简而言之,祝贺学习手头的课程 - 不要使用全局变量。
答案 1 :(得分:5)
我可能不明白这个问题,但是阻止你做什么
::state.var
普通::
表示全局命名空间,虽然使用全局符号有众所周知的问题,而全局变量也有各自的问题(通常用C ++代码代替单例),没有什么神奇的恶魔关于在全局命名空间中使用全局变量。 ::errno
是这样一个变量的例子,它与几乎所有类似Unix的平台上的C和C ++应用程序相关联。
答案 2 :(得分:2)
嗯,有一个简单的选择:
extern State state;
State& mystate = state;
namespace qt {
class State;
class Gui {
public:
void foo() {
mystate.var = 3;
}
private:
State* state;
};
}
...但也有一些名为Technical Debt的东西,你正在深深借用。