1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| class Base : public ICollectionHolder<Base, SomeType>{
public:
Base():ICollectionHolder<Base, SomeType>(*this){
}
virtual ~Base();
};
/* un élément qui maintient une collection de SomeType, qui peut être tracé, mais pas déplacé
*/
class Derived1 : public Base,
public IDrawable<Derived1>{
public:
Derived1():Base(),IDrawable<Derived1>(*this){
}
};
/* un élément qui maintient une collection de SomeType qui peut être déplacé mais pas tracé
*/
class Derived2 : public Base,
public IMovable<Derived2>{
public:
Derived2():Base(),IMovable<Derived2>(*this){
}
};
/* un élément qui maintient une collection de SomeType qui peut être déplacé et tracé
*/
class Derived3 : public Base,
public MoveAndDraw<Derived3>{
public:
Derived3():Base(), MoveAndDraw<Derived3>(*this){
}
};
/* un toute autre hiérarchie de classes... tous les élément maintiennent une collection de OtherType!!!
*/
class OTBase : public ICollectionHolder<OtherType>{
public:
OTBase():ICollectionHolder<OtherType>(*this){
}
virtual ~OTBase();
};
/* un élément qui maintient une collection de OtherType, qui peut être tracé, mais pas déplacé
*/
class OTDerived1 : public OTBase,
public IDrawable<OTDerived1>{
public:
OTDerived1():Base(),IDrawable<OTDerived1>(*this){
}
};
/* un élément qui maintient une collection de OtherType qui peut être déplacé mais pas tracé
*/
class OTDerived2 : public OTBase,
public IMovable<OTDerived2>{
public:
OTDerived2 ():Base(),IMovable<OTDerived2 >(*this){
}
};
/* un élément qui maintient une collection de OtherType qui peut être déplacé et tracé
*/
class OTDerived3 : public OTBase,
public MoveAndDraw<OTDerived3>{
public:
OTDerived3 ():Base(),MoveAndDraw<OTDerived3 >(*this){
}
};
/* un élément qui peut être tracé, mais qui ne contient aucune collection d'objet et qui
* ne peux pas être déplacé
*/
class NoItemD : public IDrawable<NoItemD>{
public:
NoItemD():IDrawable<NoItemD>(*this){
}
};
/* etc */ |
Partager