Actuellement, lorsqu'on souhaite extraire une donnée de sf::Packet, il n'est plus possible de lire cette donnée déjà extraite. La seule façon de le faire est d'utiliser getData et de faire quelques casts horribles qui ne devraient pas avoir lieu d'être puisqu'il faut pour cela connaître la construction interne de sf::Packet pour s'assurer de son fonctionnement. Si je veux récupérer le premier char :
char data = *reinterpret_cast<const char*>(packet.getData());
C'est juste moche
.
Je propose d'ajouter une fonction template :
template <class T>
void Packet::get(T &data)
{
*this >> data;
m_readPos -= sizeof(data);
}
Ou alors mieux : proposer des fonctions pour sauvegarder une position dans un sf::Packet pour l'y faire revenir plus tard (en clair on sauvegarde m_readPos). Ainsi que les positions statiques définies à l'avance : begin et end.
La 1e solution n'est qu'une solution vite fait, tandis que la 2e s'inscrit plus dans la logique des flux (voir std::fstream et compagnie).