例如,我有两个类,游戏和逻辑。游戏具有指向名为m_Logic的对象的唯一指针。
class Game {
public:
Game(){}
private:
std::unique_ptr<Logic> m_Logic;
}`
class Logic {
public:
Logic()
bool Run(Game &pGame) {
pGame.GetObjectPtr().DoStuff() return true;
}
在Logic Class中我使用一个引用Game对象的方法,所以最终我可以调用:
this->m_Logic->Run(*this);
在游戏类中,当我需要组件在知道游戏包含的内容的同时完成其工作时,不必经常将来自游戏对象本身的单个对象引用传递到它的组件中。 / p>
由于在这种情况下它们都依赖于彼此,可以采用哪些替代方案来保持它们尽可能独立,但是在遵循良好的设计实践的同时仍然可以相互理解?我的目标是在不必声明游戏具有的相同单个对象的引用并尽可能保持参数清洁的情况下执行此操作。
提前全部谢谢。
答案 0 :(得分:2)
如果您 Game
,那么最简单的方法就是让它们互相指向。我在您的代码示例中假设Game
拥有Logic
...因此Logic
应该拥有指向Game
的非拥有指针:
class Game;
class Logic {
Game* m_Game; // non-owning
};
class Game {
std::unique_ptr<Logic> m_Logic;
};
由于Game
已经拥有m_Logic
,因此将自己分配给m_Logic
应该非常简单。如果Game
本身构建了Logic
对象,那么您甚至可以m_Game
Game&
{{1}}以增加清晰度。