gpt4 book ai didi

c++ - 容器关系和封装

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:37:04 26 4
gpt4 key购买 nike

在我的游戏引擎中,我有一个代表某个时间点的游戏世界的状态类。此 State 包含许多 Body 对象,每个对象定义一个刚体。每个 State 都有一个容器来跟踪它拥有的 Body 对象,每个 Body 都有一个指向其父 State 的指针。

状态类大纲:

class State {
private:
std::set<Body*> _bodies;

public:
//It could be done here
void addBody(Body* body) {
//Remove from old State
if (body->_state)
body->_state->_bodies.erase(this);

//Set Body's back-reference
body->_state = this;

//Add to this State
_bodies.insert(body);
}
};

Body类大纲:

class Body {
private:
State* _state;

public:
//It could also be done here
void setState(State* state) {
//Remove from old State
if (_state)
_state->_bodies.erase(this);

//Set back-reference
_state = state;

//Add to the new State
if (_state)
_state->bodies.insert(this);
}
};

问题(如果有的话)是向 State 添加/从 State 删除 Body 需要更改每个的私有(private)成员。

有一次我考虑过拥有一个 State-Body-mediator 静态类,它可以让友元访问这两个类。这听起来不错,因为 State-Body 关系将由该名称显式管理,但管理简单关系的声明开销很大。

是否有“更好”的方法来做到这一点?我想看看那里有哪些想法。

最佳答案

好吧,你可以做到的一种方法是让两个类都有一个友元函数:

void associate(State& s, Body& b)
{
s.addBody(&b);
b.setState(&s);
}

关于c++ - 容器关系和封装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2298292/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com