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

C++ Composition, How can an Object know about the Class it is In?

比如我有两个类,Game和Logic。游戏有一个指向名为 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);

从游戏内部 Class,当我需要组件完成其工作同时了解游戏包含的内容时,不必不断地将来自游戏对象本身的单个对象引用传递到它的组件中.

由于在这种情况下它们都相互依赖,可以采取哪些替代方案来使它们尽可能独立,但在遵循良好的设计实践的同时仍然知道彼此可以合作?我的目标是做到这一点,而不必声明对游戏具有的相同单个对象的引用,并尽可能保持参数干净。

提前致谢。

如果您不想每次都传递一个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& 以更加清晰。