该模式引自游戏编程精炼,可是他那儿那琅缦沔是windows的代码,放到linux下不能运行,所以进行了调整。 % D3 G' _& P U; @
声名:在轨范设计的时辰,会经常用到一组或几组类型不异(classT)的数据,假设我们使用链表存储。
: G5 N% e* j6 m9 L- \ 面临的问题: q% ?3 f2 u! x+ T& r, ?% J
1、链表存放的位置。 6 q9 }0 c# r$ R1 o9 j
2、每建树一个对象都冲要入到该链表中,每销毁一个对象都要从链表中删除 , e9 j( {6 ]. v6 y
3、不能胡乱的插入和删除对象。
" D- }0 o6 Z0 ]9 @ 要解决膳缦沔的问题,可能需要在良多处所插入近似的代码,往往这种代码就是惹人bug的处所,有一种解决方檀卷是“自动列表模式”。 / A) c* w9 p- n% O% G* H+ I
点击(此处)折叠或打开 + t) P& B1 _0 n+ L$ V" M
#ifndef_TAUTOLISTS_H_ + f, Y7 J. k' F
#define_TAUTOLISTS_H_ + E" @6 _! l0 N% d. f- W: S3 w4 V) N
#include & \. G/ E% c) O$ V S* U) e: R2 U
#include ! R0 B6 }* W9 K) f% N9 K& L F
usingnamespacestd;
5 g( f% K8 b: B/ `' f4 C5 }4 E template
6 U) a* R8 b/ R% ]+ q classTAutolists * v: X5 T- |) e) X6 S
{ # i1 ~4 f, Q# T( B$ [
typedeftypenamelist::iteratoriter_t;
" @! w$ w) C% i0 Y, {) s* z public: 2 U2 | G9 s/ n1 r9 y
TAutolists() * B8 @ `8 @( m# t
{ 0 T5 F; V0 Q) O
ms_List.push_front(static_cast(this));
6 R& _7 f. S+ h. M& a } ; q# j$ N/ H, p! o/ K; r
virtual~TAutolists()
- v4 v9 u2 [7 i! Y w) W {
* G0 G3 z4 t( w( M+ _' u: U ms_List.remove(static_cast(this));
! w; Y& A& j$ d t. O1 C2 D }
/ t* T0 i) b9 S public:
1 W4 {3 @+ R y, D+ w staticT*GetAutolistFirst() " ?" k# z9 w: k5 t
{ - ]6 n& N: \; n7 u" S$ n9 t3 R
if(ms_List.begin()==ms_List.end()) . t# J3 [) }* Y- s+ Q" K( \! Y
{ |