Lors de la construction de structures légères contenant seulement deux éléments, de nombreux développeurs optent pour std::pair en raison de sa prise en charge intégrée pour les opérations clés telles que l'opérateur< pour un ordre strict-faible. Cependant, cette approche présente des inconvénients sous la forme d’une dénomination de variable inutile qui peut prêter à confusion. Les paires imbriquées deviennent moins souhaitables avec plus de deux membres.
Une solution alternative consiste à utiliser des tuples de Boost ou C 11. Bien que les tuples offrent une structure et une clarté améliorées par rapport à std::pair, ils peuvent toujours être difficiles à utiliser . Pour atténuer ce problème, les développeurs peuvent envisager d'utiliser des opérations basées sur les liens à la place.
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); }
Dans ce cas, tie crée un tuple de références à partir des arguments transmis. Les avantages de cette approche incluent :
Tout en héritant de manière privée à partir d'un tuple peut être suggéré comme alternative, il présente plusieurs inconvénients :
Globalement , l'implémentation d'opérateurs de comparaison via des tuples et des liens présente une option viable pour une implémentation simplifiée et correcte des opérateurs. Cependant, les implications en termes de performances doivent être prises en compte et traitées si le profilage révèle que l'opération de comparaison constitue un goulot d'étranglement dans l'exécution de l'application.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!