OVH Cloud OVH Cloud

operator[]

16 réponses
Avatar
David Hauweele
Bonjour,

J'ai une classe CChecksum avec un md5_byte_t digest[16]; en membre privé.
Je voudrais mettre un operator[] pour récupérer ou changer ce membre...
J'ai cherché des tutoriels sur les operateurs mais je n'ai pas eu beaucoup
de résultats...
Donc un lien, un petit exemple m'aiderait beaucoup !!! Merci !!! :)

--
Daft

Your lucky number is 3552664958674928. Watch for it everywhere !

10 réponses

1 2
Avatar
David Hauweele
xavier wrote:
David Hauweele wrote:

Bonjour,

J'ai une classe CChecksum avec un md5_byte_t digest[16]; en membre privé.
Je voudrais mettre un operator[] pour récupérer ou changer ce membre...
J'ai cherché des tutoriels sur les operateurs mais je n'ai pas eu
beaucoup
de résultats...
Donc un lien, un petit exemple m'aiderait beaucoup !!! Merci !!! :)



class CChecksum {
public:
md5_byte_t const & operator[](int index) const {
assert (index >= 0 && index < 16);
return digest[index];
}
md5_byte_t & operator[](int index) {
assert (index >= 0 && index < 16);
return digest[index];
}


private:
md5_byte_t digest[16];
};

xavier


undefined reference to ´CChecksum::CChecksum[in-charge]()´

Une erreur dans le reste du code peut être ???

Cela dit en passant, pendant un moment le compilateur se plaignait de ne
pas trouver le constructeur d'une structure. :/ Etrange non ??

--
Daft

Your lucky number is 3552664958674928. Watch for it everywhere !


Avatar
Fabien LE LEZ
On Wed, 12 Jan 2005 18:19:56 +0100, David Hauweele
:

J'ai une classe CChecksum avec un md5_byte_t digest[16]; en membre privé.
Je voudrais mettre un operator[] pour récupérer ou changer ce membre...


Tu es libre d'utiliser des char[] -- c'est tes oignons, puisqu'il
s'agit d'un membre privé. Par contre, évite les "magic values", écris
plutôt :

static size_t TAILLE_DIGEST= 16;
md5_byte_t digest[TAILLE_DIGEST];

Toutefois, pour l'interface publique, ça ne me paraît pas adapté.
Mieux vaut utiliser std::string :

void CChecksum::Set (std::string const& nouvelle_valeur)
{
if (nouvelle_valeur.size() != TAILLE_DIGEST)
{
// gestion d'erreur -- par exemple, une exception
}
else
{
std::copy (nouvelle_valeur.begin(),
nouvelle_valeur.end(), digest);
}
}

std::string CChecksum::Get()
{
return std::string (digest, digest + TAILLE_DIGEST);
}

[Note : je suppose que "md5_byte_t" est un typedef de "char"]


--
;-)

Avatar
xavier
David Hauweele wrote:
Bonjour,

J'ai une classe CChecksum avec un md5_byte_t digest[16]; en membre privé.
Je voudrais mettre un operator[] pour récupérer ou changer ce membre...
J'ai cherché des tutoriels sur les operateurs mais je n'ai pas eu beaucoup
de résultats...
Donc un lien, un petit exemple m'aiderait beaucoup !!! Merci !!! :)



class CChecksum {
public:
md5_byte_t const & operator[](int index) const {
assert (index >= 0 && index < 16);
return digest[index];
}
md5_byte_t & operator[](int index) {
assert (index >= 0 && index < 16);
return digest[index];
}


private:
md5_byte_t digest[16];
};

xavier

Avatar
David Hauweele
Fabien LE LEZ wrote:
On Wed, 12 Jan 2005 18:19:56 +0100, David Hauweele
:


J'ai une classe CChecksum avec un md5_byte_t digest[16]; en membre privé.
Je voudrais mettre un operator[] pour récupérer ou changer ce membre...



Tu es libre d'utiliser des char[] -- c'est tes oignons, puisqu'il
s'agit d'un membre privé. Par contre, évite les "magic values", écris
plutôt :

static size_t TAILLE_DIGEST= 16;
md5_byte_t digest[TAILLE_DIGEST];

Toutefois, pour l'interface publique, ça ne me paraît pas adapté.
Mieux vaut utiliser std::string :

void CChecksum::Set (std::string const& nouvelle_valeur)
{
if (nouvelle_valeur.size() != TAILLE_DIGEST)
{
// gestion d'erreur -- par exemple, une exception
}
else
{
std::copy (nouvelle_valeur.begin(),
nouvelle_valeur.end(), digest);
}
}

std::string CChecksum::Get()
{
return std::string (digest, digest + TAILLE_DIGEST);
}

[Note : je suppose que "md5_byte_t" est un typedef de "char"]




Je sens que je vais abandonner l'operateur []... lol

--
Daft

Your lucky number is 3552664958674928. Watch for it everywhere !


Avatar
David Hauweele
xavier wrote:
David Hauweele wrote:

Bonjour,

J'ai une classe CChecksum avec un md5_byte_t digest[16]; en membre privé.
Je voudrais mettre un operator[] pour récupérer ou changer ce membre...
J'ai cherché des tutoriels sur les operateurs mais je n'ai pas eu
beaucoup
de résultats...
Donc un lien, un petit exemple m'aiderait beaucoup !!! Merci !!! :)



class CChecksum {
public:
md5_byte_t const & operator[](int index) const {
assert (index >= 0 && index < 16);
return digest[index];
}
md5_byte_t & operator[](int index) {
assert (index >= 0 && index < 16);
return digest[index];
}


private:
md5_byte_t digest[16];
};

xavier


Ca marche :) !!!

Merci !!!!!!

--
Daft

Your lucky number is 3552664958674928. Watch for it everywhere !


Avatar
Fabien LE LEZ
Evite de citer 50 lignes juste pour rajouter une ligne :-(
http://www.giromini.org/usenet-fr/repondre.html
Avatar
M. B.
"Fabien LE LEZ" a écrit dans le message de
news:
Evite de citer 50 lignes juste pour rajouter une ligne :-(
http://www.giromini.org/usenet-fr/repondre.html


Evite de repondre a une question qui n'etait pas posee.

MB

Avatar
Fabien LE LEZ
On Wed, 12 Jan 2005 20:02:00 +0100, "M. B." :

Tu peux t'arrêter de poster ici, on vient d'hériter d'un autre troll.
Avatar
drkm
"M. B." writes:

"Fabien LE LEZ" a écrit dans le message de
news:

Evite de citer 50 lignes juste pour rajouter une ligne :-(
http://www.giromini.org/usenet-fr/repondre.html


Evite de repondre a une question qui n'etait pas posee.


Où vois-tu une réponse à quelque question ?

--drkm


Avatar
Gabriel Dos Reis
Fabien LE LEZ writes:

| On Wed, 12 Jan 2005 23:28:33 +0100, "Christophe Lephay"
| :
|
| >Mais après le luc2, c'est un peu casimir dans l'ile aux enfants :)
|
| C'est peut-être parce que je connaissais le luc2 avant que MB vienne
| troller ici, que ce dernier ne m'aime pas...

Mais aime-t-il quelqu'un ?

-- Gaby
1 2