接触c++一年了.进入了一个无论如何写代码都觉得不够优雅的阶段.最近研究了一下UML帮助自己为稍微复杂些的需求建模.UML中用的最多的怕是关联关系了.复杂的模型中,很有可能动态产生和删除对象,对象之间动态的产生/删除多重关联关系.
例如教务管理软件.
需要管理课程,学生,社团.
课程,社团和学生之间的关系都是多对多的动态关联.
那么使用什么方法能方便快捷的管理这些动态的对象?
比如不仅能高效的根据学生找他的课程和社团,还能根据社团和课程找学生.甚至能方便的实现统计那个社团的学生更喜欢哪门选修课.
任何一个对象删除,都能自动的删除该对象关联对象的关联列表中的自己.
最然我的例子是用QT容器,但是只要将容器做个替换就可以用在所有c++程序中了.
link.h
#ifndef LINK_H
#define LINK_H
#include <QMap>
#include <QList>
#include <typeinfo>
class Link
{
public:
void addLink(Link* item);
void removeLink(Link* item);
template <class FriendType> QList<FriendType*> find()
{
return *((QList<FriendType*>*)(&(links_[this][&typeid(FriendType)])));
}
protected:
Link(const std::type_info* type);
//只能通过继承此类来使用关联.type是子类的类型.
~Link();
private:
std::type_info const* type_;
//记录子类的的类型
static QMap<Link*, QMap<std::type_info const*, QList<Link*> > > links_;
/*管理了所有对象的关系表
map<对象索引, 对象的所有关系>
map<有关系的类型的索引, 以类型分组后的关系对象>
*/
};
#endif // LINK_H
link.cpp
#include "link.h"
QMap<Link*, QMap<std::type_info const*, QList<Link*