C ++组合,对象如何知道它所在的类?

时间:2015-01-29 02:12:40

标签: c++ class object dependencies composition

例如,我有两个类,游戏和逻辑。游戏具有指向名为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>

由于在这种情况下它们都依赖于彼此,可以采用哪些替代方案来保持它们尽可能独立,但是在遵循良好的设计实践的同时仍然可以相互理解?我的目标是在不必声明游戏具有的相同单个对象的引用并尽可能保持参数清洁的情况下执行此操作。

提前全部谢谢。

1 个答案:

答案 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}}以增加清晰度。