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