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&
以更加清晰。
比如我有两个类,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&
以更加清晰。