(Remarque: tuple
et tie
peut être pris de coup de pouce ou de C++11.)
Lors de l'écriture de petites structures avec seulement deux éléments, j'ai parfois tendance à choisir un std::pair
, comme toutes les choses importantes est déjà fait pour ce type de données, comme operator<
strict-faible-de la commande.
Les inconvénients mais assez inutile, les noms de variables. Même si j'ai moi-même créée typedef
, je ne me souviens pas 2 jours plus tard, ce first
et ce second
exactement, d'autant plus si elles sont de même type. C'est encore pire depuis plus de deux membres, comme l'imbrication pair
s assez bien suce.
L'autre option est un tuple
, soit à partir de Boost ou de C++11, mais qui n'a pas vraiment l'air plus agréable et plus clair. Je reviens donc à l'écriture de leurs structures de moi-même, y compris les opérateurs de comparaison.
Depuis surtout l' operator<
peut être assez pénible, j'ai pensé que de se soustraire à tout ce gâchis par simplement en s'appuyant sur les opérations définies pour tuple
:
Exemple d' operator<
, par exemple, pour un-faible-de la commande:
bool operator<(MyStruct const& lhs, MyStruct const& rhs){
return std::tie(lhs.one_member, lhs.another, lhs.yet_more) <
std::tie(rhs.one_member, rhs.another, rhs.yet_more);
}
(tie
fait tuple
de T&
de références à partir d'arguments passés.)
Edit: La suggestion de @DeadMG privé afin d'hériter de tuple
n'est pas mauvais, mais il est devenu tout à fait un certain nombre d'inconvénients:
- Si les opérateurs sont en position libre (éventuellement amis), j'ai besoin d'hériter publiquement
- Avec casting, mes fonctions / opérateurs (
operator=
précisément) peut être facilement contourné - Avec l'
tie
solution, je peux laisser certains membres s'ils n'ont pas d'importance pour la commande
Existe-il des inconvénients à cette mise en œuvre que j'ai besoin à considérer?