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

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

本文关键字:何知道 组合 对象 C++      更新时间:2023-10-16

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

在逻辑类中,我使用引用 Game 对象的方法,因此最终我可以调用:

this->m_Logic->Run(*this);

从游戏类中,当我需要组件在了解游戏包含什么时完成其工作时,不必不断地将来自游戏对象本身的单个对象引用传递到它的组件中。

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

提前谢谢大家。

如果您不想每次都传入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&以增加清晰度。