Forum de la communauté SFML

Aide => Réseau => Discussion démarrée par: Samuel Proulx le Juillet 23, 2012, 12:39:55 am

Titre: sf::Packet => obliger d'utiliser deux lignes pour une structure perso
Posté par: Samuel Proulx le Juillet 23, 2012, 12:39:55 am
Bonjour à tous et à toutes :)

Code de base :
struct SQLData
{
    std::string accountDBIp;
    std::string accountDBUser;
    std::string accountDBPassword;
};

EncryptedPacket& operator <<(EncryptedPacket& packet,const SQLData& d)
{
    packet << d.accountDBIp << d.accountDBUser << d.accountDBPassword;
    return packet;
}
 

Ceci ne fonctionne pas :
packet << i+1 << SQLdata;
//ou
packet << "caractère" << SQLdata;
 

Ceci fonctionne :
packet << i+1;
packet << SQLData;
//ou
packet << SQLData << i+1;
 

Or Laurent, si tu t'en rappelles, tu m'avais dit d'inclure simplement un entier ou enum, peu importe, pour savoir quelle structure se trouve dans le packet. Le i+1, c'est l'identifiant du type de données. La dernière solution où j'inclu le i+1 après n'est donc pas bonne.

Une solution ? Je peux inclure toutes mes structures persos n'importe comment entre elles sur la même ligne, mais je ne peux pas mixer les types primitifs avec mes structures...
Titre: Re : sf::Packet => obliger d'utiliser deux lignes pour une structure perso
Posté par: Laurent le Juillet 23, 2012, 08:07:02 am
Ton opérateur << attend un EncryptedPacket&, mais les autres opérateurs << (définis dans SFML) renvoient un sf::Packet&. Du coup une fois que tu as appelé un opérateur << de SFML, tu ne peux plus appeler le tien.

Il ne faut jamais faire de surcharge en utilisant tes propres types dérivés, toujours la classe de base. Comme ça tu gardes une compatibilité maximum.
Titre: Re : sf::Packet => obliger d'utiliser deux lignes pour une structure perso
Posté par: Samuel Proulx le Juillet 23, 2012, 02:35:20 pm
Ah d'accord merci beaucoup ! (encore une fois)  ;D