C++ 组合,对象如何知道它所在的类
C++ Composition, How can an Object know about the Class it is In?
例如,我有两个类,游戏和逻辑。游戏具有指向名为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&
以增加清晰度。
相关文章:
- 努力将整数转换为链表。不知道我在这里做错了什么
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 可组合的lambda/std::函数与std::可选
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 叮当不知道PTRDIFF_MAX?
- 如何在不知道向量大小的情况下输入向量内部的向量?
- 混合组合和继承的C++问题
- 我需要将多个函数组合为一个函数
- 我正在尝试使用 c++ 创建一个货币转换程序,我不知道如何继续
- Python中的for循环与C++有何不同
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 不知道某个东西是否被忽略会引入未定义的行为吗
- 我想知道长双倍和双倍之间的区别
- 我需要知道编译器如何在cpp中使用析构函数
- 如何在C++中读取空格分隔的输入 当我们不知道输入的数量时
- C++ 组合,对象如何知道它所在的类
- .cpp文件的组合框Scopes和Function in Scope在VS2008 sp2中不起作用.知道为什么这些组合