该模式引自游戏编程精炼,可是他那儿那琅缦沔是windows的代码,放到linux下不能运行,所以进行了调整。
3 @1 W' G& k* G. j 声名:在轨范设计的时辰,会经常用到一组或几组类型不异(classT)的数据,假设我们使用链表存储。
9 N; R k$ a2 K& z0 q9 p 面临的问题: $ L) z5 K$ r: |" K" h6 L1 r. x
1、链表存放的位置。
3 K( q$ G6 {" C! p% r 2、每建树一个对象都冲要入到该链表中,每销毁一个对象都要从链表中删除 : B/ a) @/ M4 Z1 C' B
3、不能胡乱的插入和删除对象。 # D6 N1 W2 l1 @* v4 A5 K# h" f3 b7 T3 J
要解决膳缦沔的问题,可能需要在良多处所插入近似的代码,往往这种代码就是惹人bug的处所,有一种解决方檀卷是“自动列表模式”。
- h, C! \# C( F. k2 `0 E3 v7 Z 点击(此处)折叠或打开
) o& N2 h& y4 C! R #ifndef_TAUTOLISTS_H_ " y4 ]/ b2 X4 u/ T
#define_TAUTOLISTS_H_
2 T8 V, @' Q+ d6 g/ v #include 3 d9 ~# U2 ]) S! \
#include
9 T# k8 K' E- ^, A+ C$ O6 { usingnamespacestd; 3 S, F* x( O0 `9 ^
template
8 r6 M5 t w5 j classTAutolists $ o# e0 B+ W9 D) \1 l" S
{
8 l' N/ [# J G: [: r, G4 ]" K% z typedeftypenamelist::iteratoriter_t; 3 z- F% [( V: O( f7 P
public: ) Y) k: d# l" k
TAutolists() ( K6 d/ m) N; d# R3 b
{
2 o! |, I, q; `8 E" W/ ]; |- \) H* k ms_List.push_front(static_cast(this)); $ q/ [0 I" t9 V7 F
}
0 C0 O& P% r) v virtual~TAutolists() 3 a6 b* G2 D/ s5 X
{
% p7 |, \) N: z7 w ms_List.remove(static_cast(this)); , K+ y4 s) @& c% k7 U% \, `6 G
}
1 l- D" _; n1 c% X6 ^) L7 w public:
0 N( d' K0 x4 w" ~5 }% P" i% G staticT*GetAutolistFirst()
8 |! r" @8 M/ O/ Y { . S; H. q% ~* K' e0 k
if(ms_List.begin()==ms_List.end())
& n7 S7 N8 R; s; u { |