【问题标题】:C++ Composition, How can an Object know about the Class it is In?C ++组合,对象如何知道它所在的类?
【发布时间】:2015-03-28 03:50:46
【问题描述】:

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

在逻辑类中我使用了一个引用游戏对象的方法,所以最终我可以调用:

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

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

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

提前谢谢大家。

【问题讨论】:

    标签: c++ class object dependencies composition


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复,此方法在我的标题上使用前向声明时有效。
    猜你喜欢
    • 1970-01-01
    • 2013-06-02
    • 2016-12-29
    • 2011-06-28
    • 1970-01-01
    • 2022-01-20
    • 2010-12-24
    • 1970-01-01
    相关资源
    最近更新 更多