项目中用到的数据CItem类

CItem

#ifndef _CITEM_H_
#define _CITEM_H_
#include <map>
#include <memory>
template <typename T>
class CItem
{
public:
	/**************************************************************
	  *  @brief     		根据id移除项
	  *  @param     		id
	 **************************************************************/
	static  void erase(long long id);

	/***************************************************************
	  *  @brief     		根据id  索引项获取到项
	  *  @param     		项ID
	 **************************************************************/
	static  std::shared_ptr<CItem<T> > at(long long id);

	/***************************************************************
	  *  @brief     		获取数据指针
	 **************************************************************/
	std::shared_ptr<T> data();
	

	/***************************************************************
	  *  @brief     		设置项数据部分
	  *  @param     		数据指针
	 **************************************************************/
	void setData(std::shared_ptr<T> ptr);

	/***************************************************************
	  *  @brief     		创建项并加入到map表中
	  *  @return     		创建的项
	 **************************************************************/
	static  std::shared_ptr<CItem<T> >  createItem();

	/***************************************************************
	  *  @brief     		返回Map 表数据个数
	 **************************************************************/
	static  size_t  size();

	/***************************************************************
	  *  @brief     		返回当前项ID 
	 **************************************************************/
	long long  ID();

	~CItem();
	/***************************************************************
	  *  @brief     		构造函数
	 **************************************************************/
	explicit CItem();
private:
	
	long long  m_id;                                                                        //存储当前项ID
	std::shared_ptr<T> m_data;     //数据指针
	static std::map<long long, std::shared_ptr<CItem<T>>>* m_items;  //数据表
	static  long long g_id;															  // 全局ID
};

template<typename T>
std::map<long long, std::shared_ptr<CItem<T> >>* CItem<T>::m_items \
= new std::map<long long, std::shared_ptr<CItem<T>>>;

template<typename T>
long long CItem<T>::g_id = 0;

template<typename T>
long long CItem<T>::ID()
{
	return m_id;
}
template<typename T>
std::shared_ptr<T> CItem<T>::data()
{
	return	m_data;
}

template<typename T>
inline void CItem<T>::setData(std::shared_ptr<T> ptr)
{
	m_data = std::move(ptr);
}
template<typename T>
inline std::shared_ptr<CItem<T> > CItem<T>::createItem()
{
	std::shared_ptr<CItem<T>> item = std::make_shared<CItem<T> >();
	std::shared_ptr<T>  data = std::make_shared<T>();
	static_cast<CItem<T>*>(item.get())->setData(data);
	std::pair<long long, std::shared_ptr<CItem<T>>> pair(static_cast<CItem<T>*>(item.get())->ID(),item);
	m_items->insert(pair);
	return item;
}
template<typename T>
inline size_t CItem<T>::size()
{
	return m_items->size();
}
template<typename T>
inline std::shared_ptr<CItem<T> > CItem<T>::at(long long id)
{
	if (m_items->find(id) != m_items->end())
		return m_items->at(id);
	return	 nullptr;
}
template<typename T>
inline void CItem<T>::erase(long long id)
{
	if (m_items->find(id) != m_items->end())
	{
		m_items->erase(id);
	}
}

template<typename T>
CItem<T>::~CItem()
{
}

template<typename T>
CItem<T>::CItem()
{
	m_id = g_id++;
}

#endif // !_CITEM_H_
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值