基于类型的链表

开发中 往往需要 遍历一种类型的所有对象,对此有人用了 工厂类的方式来管理 但是有时候这些类型纯粹只需要遍历而存在 而不需要做查找 因此可以在其创建和销毁调用时 使用静态变量存储成双向链表 
以下是C++版本

#define SELF_LINKLIST_DECLARE(TClass)\
static TClass* ms_pHead;\
static TClass* ms_pTail;\
public:\
static TClass* Head()\
{\
return ms_pHead;\
}\
static TClass* Tail()\
{\
return ms_pTail;\
}\
TClass* pPrev;\
TClass* pNext;\
void Insert()\
{\
if (!ms_pTail)\
{\
ms_pTail = this;\
ms_pHead = this;\
pPrev = pNext = NULL;\
return;\
}\
ms_pTail->pNext = this;\
pPrev = ms_pTail;\
ms_pTail = this;\
pNext = NULL;\
}\
void Remove()\
{\
if (ms_pHead == this)\
{\
ms_pHead = pNext;\
return;\
}\
if (ms_pTail == this)\
{\
ms_pTail = pPrev;\
return;\
}\
if (pPrev)\
{\
pPrev->pNext = pNext;\
}\
if (pNext)\
{\
pNext->pPrev = pPrev;\
}\
}

#define SELF_LINKLIST_IMPLEMENT(TClass)\
TClass* TClass::ms_pHead = NULL; \
TClass* TClass::ms_pTail = NULL;


class C1
{
public:
SELF_LINKLIST_DECLARE(C1)

C1()
{
Insert();
}

~C1()
{
Remove();
}

void Func()
{
printf("C1::Func");
}
};  

SELF_LINKLIST_IMPLEMENT(C1);

这样就可以使用头指针找到对象的头进行遍历


Unity3D C#版本 
public class SelfLinkListObj : MonoBehaviour
{
static SelfLinkListObj ms_HeadRef = null;

static SelfLinkListObj ms_TailRef = null;

static SelfLinkListObj Head
{
get
{
return ms_HeadRef;
}
}

static SelfLinkListObj Tail
{
get
{
return ms_TailRef;
}
}

public SelfLinkListObj PrevRef = null;

public SelfLinkListObj NextRef = null;

void Insert()
{
if (ms_TailRef == null)
{
ms_TailRef = this;
ms_HeadRef = this;
return;
}

ms_TailRef.NextRef = this;
PrevRef = ms_TailRef;

ms_TailRef = this;
}

void Remove()
{
if (ms_HeadRef == this)
{
ms_HeadRef = NextRef;
return;
}

if (ms_TailRef == this)
{
ms_TailRef = PrevRef;
return;
}

if (PrevRef)
{
PrevRef.NextRef = NextRef;
}

if (NextRef)
{
NextRef.PrevRef = PrevRef;
}
}

protected virtual void Awake()
{
Insert();
}

protected virtual void OnDestroy()
{
Remove();
}
}

但是问题来了 C#似乎没法支持宏 只能每次要用拷贝一下 改下名 着实蛋疼... 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值