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
|
// pas besoin de typedef en C++
struct un_dossier
{
dossier dossier_n;
};
typedef std::list<un_dossier> Tdossier;
class node
{
public:
// ces constructeurs vont rendre impossible d'avoir les deux pointeurs qui pointent sur quelque chose, c'est soit l'un, soit l'autre, soit aucun
node() : m_d( NULL ) , m_ld( NULL ) {}
node( un_dossier* pd ) : m_d( pd ) , m_ld( NULL ) {}
node( Tdossier* pld ) : m_d( NULL ) , m_ld( pld ) {}
node( const node& other ) : m_d( other.m_d ) , m_ld( other.m_ld ) {}
// helper
bool isList() const { return ld != NULL; }
//les accesseurs, on expose pas les membres pour éviter que l'utilisateur ne change les pointeurs lui même
un_dossier* d() const { return m_d; }
Tdossier* ld() const { return m_ld; }
private:
un_dossier* m_d;
Tdossier* m_ld;
};
typedef std::list< node > special_list; // une liste qui peut "contenir" les deux
// utilisation
un_dossier* pd = new un_dossier();
Tdossier* pl = new Tdossier();
special_list.push_back( pd ); // pour ajouter un dossier
special_list.push_back( pl ); // pour ajouter une liste
const node& first_node = special_list.front();
if( first_node.isList() )
{
Tdossier* first_list = first_node.ld();
}
else
{
un_dossier* first_dossier = first_node.d();
} |
Partager