该模式引自游戏编程精炼,可是他那儿那琅缦沔是windows的代码,放到linux下不能运行,所以进行了调整。 ' x1 X6 K: ?/ y( O8 o
声名:在轨范设计的时辰,会经常用到一组或几组类型不异(classT)的数据,假设我们使用链表存储。 , i- a* i& G) _" ^$ O. u3 o8 f; }
面临的问题:
2 t7 ?: M( q W j' U 1、链表存放的位置。 ( }& U/ Z4 d/ R
2、每建树一个对象都冲要入到该链表中,每销毁一个对象都要从链表中删除 * G7 W+ _0 f+ z1 m' ^% r% [
3、不能胡乱的插入和删除对象。
8 y6 E4 Z. w. `. l 要解决膳缦沔的问题,可能需要在良多处所插入近似的代码,往往这种代码就是惹人bug的处所,有一种解决方檀卷是“自动列表模式”。 - n }- C- C4 H8 s! P9 O8 M
点击(此处)折叠或打开 1 Y* Z- T$ f* J: B5 l; h/ V: t
#ifndef_TAUTOLISTS_H_ 7 F! S/ d3 m( J8 b0 A
#define_TAUTOLISTS_H_ 9 e9 ^# Q. p+ p/ ~! y
#include
' o c, l+ c4 @4 U #include
$ m" H. c/ l& d% F# H usingnamespacestd;
) U# j8 \. S! Y; M$ Q template
^: J: A9 P, M; I7 Y classTAutolists ( N% n9 x8 M, r w- s
{ , k6 @1 _; k1 p& X( z, k
typedeftypenamelist::iteratoriter_t;
6 p2 v* D/ G9 X3 c& s public:
: g" Q% o. ?( r8 }$ G TAutolists()
" c- [! h L! e {
: Z# S/ t" P1 t0 r& w ms_List.push_front(static_cast(this)); 7 s/ ]3 S1 w( ~
}
: X* V) c6 M0 |# a virtual~TAutolists() ) o: {7 g. e: }: t6 Q# I
{ 3 V& t' F6 \/ l2 V
ms_List.remove(static_cast(this)); i* m7 B' w6 y' O/ B- a
}
% i- V R3 z/ ?. F% k# X# p public:
8 l* B/ `3 J+ t4 h staticT*GetAutolistFirst() & L+ }. W2 ]- h
{ if(ms_List.begin()==ms_List.end()) |