如果你的项目中有大量的数据要管理,同时要对这些数据进行增删改查的操作,这时候有必要写一个模板的管理类
1 getdata只是测试用的, 最好是数据不能这么暴露给用户,可以使用 设计模式中的迭代器来解决这个问题。
2 更多的时候有扩展,这时候 可以从模板类来派生, 大家要知道模板类是在预编器在预编译代码的最后阶段完成的,根据指定类型生成对应的类,所以可以放心当普通的类使用。
下面是代码,注意override auto 使用,同时注意t模板,data是保护类型,要不然派生类操作不了
#ifndef MGRT_H
#define MGRT_H
#include <vector>
using namespace std;
template <class T>
class MgrT
{
public:
virtual void append(T* t);
virtual void remove(T* t);
virtual vector<T*>& getData();
MgrT(){}
virtual ~MgrT() {}
protected:
vector<T*> m_arData;
};
template <class T>
void MgrT<T>::append(T* t)
{
m_arData.push_back(t);
}
template <class T>
void MgrT<T>::remove(T* t)
{
auto a = m_arData.begin();
for (; a != m_arData.end(); a++)
{
if ((*a) == t)
{
m_arData.erase(a);
break;
}
}
}
template <class T>
vector<T*>& MgrT<T>::getData()
{
return m_arData;
}
#endif // MGRT_H
#ifndef MYFIRSTMGR_H
#define MYFIRSTMGR_H
typedef struct {
QString str;
}Conference;
class MyFirstMgr : public MgrT<Conference>
{
friend class Singleton<MyFirstMgr>;
public:
MyFirstMgr(){}
virtual void append(Conference* t) override
{
m_arData.push_back(t);
m_arData.push_back(t);
}
};
Conference* confer = new Conference();
confer->str = "abc";
Singleton<MyFirstMgr>::getInstance()->append(confer);
vector<Conference*>& arData = Singleton<MyFirstMgr>::getInstance()->getData();
for (auto&a : arData)
{
qDebug() << a->str;
}
Singleton<MyFirstMgr>::getInstance()->remove(confer);
arData = Singleton<MyFirstMgr>::getInstance()->getData();
qDebug() << arData.size();