Bonjour à tous et à toutes
J'ai lu dans la doc (directement du fichier Packet.hpp de la version 2) qu'il est possible de surcharger l'opérateur << et >> afin d'intégrer nos propres structure de données.
Voilà le petit problème : la doc montre comment surcharger avec des fonctions devrais-je dire puisque c'est à l'extérieur d'une classe quelconque. Seulement, j'aimerais bien qu'il s'agisse de méthode à une classe (EncryptedPacket) qui hérite publiquement de sf::Packet.
Seulement voilà, selon ce que je constate, il est impossible d'appeler une surcharge X (de <<, >>) à l'intérieur d'une surcharge Y des opérateur << et >>.
Exemple :
EncryptedPacket& EncryptedPacket::operator <<(const DataConnection& data)
{//Toutes ces données sont des sf::Int32 ou std::string (qui sont déjà surchargé dans sf::Packet)
*(this) << data.dataType << data.clientVersion << data.user << data.password << data.server;
return *this;
}
J'ai le droit à : no match for 'operator<<' in '*(net::EncryptedPacket*)this << data.dataType.
J'ai alors pensé aller voir dans le code source afin de créer une copie des surcharges utilisées (string et Int32) :
Int32 ToWrite = htonl(data.dataType);
append(&ToWrite, sizeof(ToWrite));//...
Mais voilà quand on arrive avec l'opérateur >>, impossible d'accéder à l'élément m_readPos :
if (checkSize(sizeof(data.dataType)))
{
data.dataType = ntohl(*reinterpret_cast<const Int32*>(&m_data[m_readPos]));
m_readPos += sizeof(data.dataType);
}
Parce que cet attribut est privé dans sf::Packet. Ce qui veut forcément dire que je ne suis pas sensé faire une tel manipulation...
Existe-t-il une solution afin d'utiliser une surcharge des opérateurs << et >> dans une autre surcharge de ces deux opérateurs ?
Merci beaucoup et bonne journée !