Déclarer des objets dans les attributs de la classe définissant l'objet déclaré [Résolu]

Signaler
Messages postés
5
Date d'inscription
samedi 9 mai 2009
Statut
Membre
Dernière intervention
5 octobre 2011
-
Messages postés
3809
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
22 avril 2020
-
Bonjour,

Je suis entrain de développer un générateur de traffic et je voulais savoir si l'on peut déclarer des objets (par exemple Packet) dans les attributs de la classe Packet pour pointer sur d'autre paquets.

Concrètement est ce qu'on peut faire cela dans les attributs:

class Packet
{
 
private:
    Packet *m_previousPacket; //  EST CE QUE C'EST POSSIBLE?
    Packet *m_followingPacket; // EST CE QUE C'EST POSSIBLE?
 
public:
 
    DropPacket(); // PAS IMPORTANT POUR LA QUESTION
    MarkedPacket(int VLAN); // PAS IMPORTANT POUR LA QUESTION
 
 
};


Merci d'avance

4 réponses

Messages postés
14957
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
25 mai 2020
91
Oui, c'est possible.
Au vu de ton code, tu cherches à chainer des éléments. Plutôt que de ré-inventer la roue, je te proposais de voir si la classe vector de la STL pouvait correspondre à tes besoins...


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
3809
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
22 avril 2020
105
Petite précision:
- std::array => Tableau à taille fixe.
- std::vector => Tableau à taille variable.
- std::list => Liste doublement chaînée.
- std::forward_list => Liste simplement chaînée.

En gros, ce que Buno te dit, c'est qu'il serait préférable pour toi de faire:
class Packet
{
public:
    DropPacket();
    MarkedPacket(int VLAN);
};

Puis:
std::list packets;
// ou
std::list packets;
// ou encore mieux
std::list packets; // En utilisant un boost::intrusive_pointer sur Packet.


Si tu n'as pas besoin de "retourner en arrière", alors un std::forward_list serait plus adapté qu'un std::list.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Messages postés
14957
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
25 mai 2020
91
Bonjour,
Si tu veux faire une liste chainée, pourquoi ne pas te tourner vers les std::vector?

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
5
Date d'inscription
samedi 9 mai 2009
Statut
Membre
Dernière intervention
5 octobre 2011

Je n'ai pas compris ta question? En fait mon probleme c'est de savoir si je peux déclarer un objet Packet dans les attributs de la classe décrivant ce meme objet?