该模式引自游戏编程精炼,可是他那儿那琅缦沔是windows的代码,放到linux下不能运行,所以进行了调整。 9 |, n8 ~3 L, j4 `+ o
声名:在轨范设计的时辰,会经常用到一组或几组类型不异(classT)的数据,假设我们使用链表存储。 5 P4 H" R% N" E+ \/ U" [9 k
面临的问题: A, S8 R9 g: ^1 [1 \3 h
1、链表存放的位置。 / B* B0 o0 T( O0 d
2、每建树一个对象都冲要入到该链表中,每销毁一个对象都要从链表中删除
$ r2 h- i! S% X h+ c7 o 3、不能胡乱的插入和删除对象。 : @8 V( A$ h% r
要解决膳缦沔的问题,可能需要在良多处所插入近似的代码,往往这种代码就是惹人bug的处所,有一种解决方檀卷是“自动列表模式”。 + g- T% [+ n: v+ v: r7 d- { T
点击(此处)折叠或打开
; `8 t0 t) |" b0 \! F6 L #ifndef_TAUTOLISTS_H_ 4 F- @- o- A9 j5 ] L8 i
#define_TAUTOLISTS_H_
1 n# W$ I4 I' J- H& L #include
4 L" R' z# u& [5 P* u6 |3 A7 W #include
9 o% m- {: w- U, z! y, `% ^1 w usingnamespacestd; $ a, I. D6 j6 S
template
% _/ s5 K5 {+ B. ~& Q( ` classTAutolists
9 B/ j% h: t2 \" q/ T) z {
4 m5 i5 U: ]6 B" d8 i$ c typedeftypenamelist::iteratoriter_t; # Y/ }) @) U7 N1 c
public: / A" |$ ~+ n3 I V
TAutolists() ( U( E) Y$ y' L! }8 _
{ A# \/ F% V( F* t5 f
ms_List.push_front(static_cast(this));
% L6 g9 g- a+ @2 u }
& R& D- J+ F7 l4 s L: H6 q* u virtual~TAutolists()
% X- a; R* `+ n: g- ?8 X { 3 n3 Y M) L7 C7 i, @
ms_List.remove(static_cast(this)); % H* a, ]* h6 D& p$ j/ A% Z
}
3 _0 J1 H) {$ |3 r% e public:
. K, J+ s' Q T& ]! l8 S staticT*GetAutolistFirst() 8 ~, g) h; D7 g& x' p
{ if(ms_List.begin()==ms_List.end()) |