首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++对象交互

C++对象交互
EN

Stack Overflow用户
提问于 2013-05-15 16:08:21
回答 4查看 3.8K关注 0票数 1

我在c++里有一个2d世界,里面满是动物一样的实体,我正在编写一个程序。我有一个世界级和和实体类(以及从实体继承的不同类型的实体的级联)。

我希望实体“知道”其所在的世界,并能够与实体的2d数组很好地交互,但我不希望它继承世界(毕竟,实体不是世界)。所以我只是想找出一些好的方法来实现这一点。当然,我可以让每个实体都包含一个指向它所在的世界的指针,但它看起来相当混乱。对于2d数组中的实体来说,是否有一种更简单的方法来“知道”包含它的world对象。

对于作为另一个对象的成员变量的对象,在c++中有任何方法知道包含它的对象吗?

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-05-15 16:16:21

聚合(为每个实体提供一个world指针)是最简单的解决方案。另一种解决方案是有第三个中介对象,它维护指向世界和实体的指针,存储它们之间的关系,并中介(因此命名)它们之间的通信。这个对象可能是一个全局的单例(大多数程序员会不寒而栗,但我不认为其中有几个是坏事),否则每个世界和实体都需要一个指向它的指针来进行通信,这显然不是第一个解决方案的大改进。

票数 3
EN

Stack Overflow用户

发布于 2013-05-15 16:14:11

我有一个世界级的

哦,亲爱的。

撇开这一点不说,你的实体与其环境的有意义的互动是什么?它是否能够查询任意信息,从地平线上看到,询问其他实体的状况?

或者根据它的位置和属性,它应该有一些有限的视图吗?

在第一种情况下,它显然是一个类似于神的实体,而像封装和分离关注点这样的普通关注点并不适用。

在第二种情况下,公开一个接口(您可以使它抽象以减少耦合),它只允许它看到它应该看到的东西。

好吧,那么第二个案子看起来就像

代码语言:javascript
复制
class World; // is a dumb container of entities
class Environment; // is an entity's window on the world
class Entity {
public:
    void take_a_turn(Environment&) = 0;
};
class Environment {
public: // control what an entity can do to (see of) the World
    container<const Entity*> visible_entities() const;
    result attempt_to_eat(const Entity*);
    result attempt_to_mate(const Entity*);
    result run_away_from(const Entity*);
};

当然,如果您的实体对象是活动的(即,它们在自己的线程中自动和连续地运行),它们需要保持指向世界或环境的引用或指针。

但是,如果您只是每次调用它们,当它们有机会做一些事情时,每次传递引用都是可以的。

票数 1
EN

Stack Overflow用户

发布于 2013-05-15 16:15:22

假设我对您的理解是正确的,那么每个实体中的一个world指针的另一个替代方法就是给每个世界一个唯一的id,然后在将该id添加到其世界时将其存储在该实体中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16569991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档