Usage classe print

XavierMiller:
As-tu des pointeurs vers la définition de la classe print ?

Aie je savais bien que quelqu'un me sortirait quelque chose que je ne pigerais pas xD

Je pense que ça serait plus clair (pour moi surtout) de parler concrètement en code. Voici donc les parties qui nous intéresse ici, tirée de la lib HardwareSerial d'Energia (basé sur le core Arduino donc c'est quasiment la même chose) élaguée pour ne laisser que les parties qui nous interesse :

HardwareSerial.h

class HardwareSerial : public Stream
{
	public:
		virtual size_t write(uint8_t);
		using Print::write; // pull in write(str) and write(buf, size) from Print

};

HardwareSerial.cpp

size_t HardwareSerial::write(uint8_t c)
{

//code pour placé c dans le buffer

	return 1;
}

print.h :

class Print
{
  public:
    virtual size_t write(uint8_t) = 0;
    size_t write(const char *str) { return write((const uint8_t *)str, strlen(str)); }
    virtual size_t write(const uint8_t *buffer, size_t size);
};

Print.cpp :

size_t Print::write(const uint8_t *buffer, size_t size)
{
  size_t n = 0;
  while (size--) {
    n += write(*buffer++);
  }
  return n;
}

size_t Print::print(const char str[])
{
  return write(str);
}

A recopier tout ça ensemble ça me semble de moins en moins clair ... Donc clairifions les choses d'abord : comme "tout le monde" utilise un write() ça devient assez compliqué de savoir qui est le write() de qui, et avec tous ces virtual difficile à un moment de savoir qui overload qui ... Et je suis pas encore bien familiarisé avec les règles de classe du C++, l'occasion de se perfectionner avec ce sac de noeud !

Donc arrête moi si me trompe, le write utiliser dans Print::write() ici n += write(*buffer++); est le write de HardwareSerial ? Ca me parait logique sinon Print ne pourrait pas s'utiliser dans n'importe quel classe.

Et à partir de la j'y comprend plus grand chose au sac de noeud ...