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

标签 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 类中,我使用了一个引用 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&为了更加清晰。

关于C++ 组合,一个对象如何知道它所在的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28205929/

相关文章:

c++ - 使用 Xerces-C++ 解析递归 XML 模式 (XSD) 时出现段错误

c++ - 将具有嵌套类型的类分离为标题和源

java - 当一个对象只被定义时会发生什么?

php - 构造函数返回一个对象,而不是一个值

json - 基于字符串数组在 jq 中进行过滤

C++ OpenGL 网格渲染

c++ - `std::vector` 的快速哈希函数

c++ - 如何在 C++ 中使用 linux 命令?

javascript jsdoc命名空间类静态方法

javascript - 视频错误 - 未捕获( promise )DOMException : The play() request was interrupted by a call to pause()