Rendre une fonction dépendante d'une variable en c++

Fermé
wella_salwa Messages postés 15 Date d'inscription lundi 31 octobre 2022 Statut Membre Dernière intervention 30 mars 2024 - Modifié le 31 oct. 2022 à 13:41
wella_salwa Messages postés 15 Date d'inscription lundi 31 octobre 2022 Statut Membre Dernière intervention 30 mars 2024 - 1 nov. 2022 à 09:32

dans mon algo, j'ai une action windowincrease présentée par la fonction ci dessous, je veux que cette fonction soit dépendante d'un état qui est une variable i, c'est-à-dire windowincrease(i) qui varie selon i.

comment faire en c++

voici mon code : 

void
        ConsumerPcon::WindowIncrease()
       {
          if (m_ccAlgorithm == CcAlgorithm::AIMD) {
        if (m_window < m_ssthresh) {
          m_window += 1.0;
          }
         else {
          m_window += (1.0 / m_window);
         }
        }
        else if (m_ccAlgorithm == CcAlgorithm::CUBIC) {
          CubicIncrease();
        }
        else if (m_ccAlgorithm == CcAlgorithm::BIC) {
         BicIncrease();
        }
        else {
          BOOST_ASSERT_MSG(false, "Unknown CC Algorithm");
       }
        NS_LOG_DEBUG("Window size increased to " << m_window);
        }

2 réponses

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 31 oct. 2022 à 14:22

Salut wella_salwa,

Ce que tu postes n'est pas un algorithme, c'est un extrait de code source en C++.

Il s'agit de l'implémentation de la méthode WindowIncrease() de la classe ConsumerPcon et il semblerait que "ton" code vienne de ce fichier ndn-consumer-pcon.cpp pour une classe décrite dans cet entête ndn-consumer-pcon.hpp :

https://github.com/6th-ndn-hackathon/congestion-control/blob/master/apps/ndn-consumer-pcon.cpp#L110

https://github.com/6th-ndn-hackathon/congestion-control/blob/master/apps/ndn-consumer-pcon.hpp#L39

Sais-tu ce qu'est le polymorphisme  en C++ ?

0
wella_salwa
31 oct. 2022 à 14:33

oui je sais , je suis entrain de simuler une topologie sur NS-3

je n'ai pas une idée sur le " polymorphisme "

0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 31 oct. 2022 à 15:51

Donc, l'implémentation de la méthode WindowIncrease() de la classe ConsumerPcon est dans ce fichier ndn-consumer-pcon.cpp pour une classe décrite dans cet entête ndn-consumer-pcon.hpp :

https://github.com/6th-ndn-hackathon/congestion-control/blob/master/apps/ndn-consumer-pcon.cpp#L110

https://github.com/6th-ndn-hackathon/congestion-control/blob/master/apps/ndn-consumer-pcon.hpp#L39

Cette implémentation ne permet pas le passage de paramètres.

Comme le C++ supporte le polymorphisme, tu peux insérer dans la description de la classe ConsumerPcon de l'entête ndn-consumer-pcon.hpp une nouvelle méthode void WindowIncrease(int i); (en supposant que que i soit un int)

class ConsumerPCON : public ConsumerWindow {
public:
  static TypeId
  GetTypeId();

  /**
   * \brief Default constructor
   */
  ConsumerPCON() :
      CC_ALGORITHM {boost::to_upper_copy(getEnvVar("SCEN_NAME"))}
  {
    assert(!CC_ALGORITHM.empty());
    std::cout << "Started Consumer PCON, Algorithm: " << CC_ALGORITHM << "\n";
    ConsumerWindow();
  }

  // From App
  virtual void
  OnData(shared_ptr<const Data> contentObject) override;

  virtual void
  OnTimeout(uint32_t sequenceNumber) override;

//  virtual void
//  WillSendOutInterest(uint32_t sequenceNumber);

private:
  void windowDecrease();

  void windowIncrease();
  void windowIncrease(int i);

  void
  cubicIncrease();
(...)

et écrire dans ndn-consumer-pcon.cpp l'implémentation de cette méthode avec cette nouvelle signature, sans toucher à la précédente (crée une nouvelle "fonction" portant le même nom, mais supportant le passage de ce paramètre) :

void ConsumerPCON::windowIncrease()
{
  if (CC_ALGORITHM == "AIMD") {
    if (m_window < m_sstresh) {
      m_window = m_window + 1.0;
    }
    else {
      m_window += (1.0 / m_window);
    }
  }
  else if (CC_ALGORITHM == "CUBIC") {
    cubicIncrease();
  }
  else if (CC_ALGORITHM == "BIC") {
    bicIncrease();
  }
  else {
    assert((false) && "Wrong CC Algorithm!");
  }
}

void ConsumerPCON::windowIncrease(int i)
{
  // TODO: écrire la version modifiée de cette méthode devant s'exécuter
  // lorsqu'ellest appelée avec un int passé en paramètre
}

Lorsque cette méthode WindowIncrease() sera appelée sans paramètres par le code existant, c'est le code d'origine qui s'exécutera.

Lorsque cette méthode WindowIncrease() sera appelée avec un int passé en paramètre, c'est le code de ta nouvelle méthode qui sera exécuté.

1
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083 > [Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024
31 oct. 2022 à 17:35

Sans toucher au code existant, tu peux aussi faire une classe héritant de ConsumerPCON, qui comprenne cette méthode additionnelle.

https://openclassrooms.com/fr/courses/7137751-programmez-en-oriente-objet-avec-c/7531561-decouvrez-la-notion-dheritage

1
wella_salwa Messages postés 15 Date d'inscription lundi 31 octobre 2022 Statut Membre Dernière intervention 30 mars 2024 > [Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024
1 nov. 2022 à 09:32

Merci infinement ...

0