Face à de petites structures composées de seulement deux éléments, beaucoup optent pour des paires standard en raison de la pré- nécessités définies, comme l'opérateur de commande strict-faible. Cependant, cette approche présente des défis en raison de ses noms de variables non informatifs, en particulier lorsqu'il s'agit de plusieurs éléments ou de paires imbriquées.
Une alternative consiste à utiliser des tuples, soit de Boost, soit de C 11. Bien qu'ils offrent un aspect plus net, ils impliquent toujours des complexités lors de la comparaison. À la recherche d'une solution plus simple, certains envisagent de contourner ce problème en s'appuyant uniquement sur des opérations de tuple.
Par exemple, un opérateur de commande strict-faible peut être écrit à l'aide d'un lien, qui forme un tuple de références T&A à partir des arguments fournis. :
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); }
Cette approche élégante permet des opérations de comparaison faciles. Cependant, il est toujours important de considérer les inconvénients. Une préoccupation concerne le cas où les opérateurs sont indépendants ou amis, auquel cas un héritage public peut être nécessaire. Cela peut conduire à des vulnérabilités où des fonctions ou des opérateurs (en particulier Operator=) pourraient être contournés. De plus, les liens peuvent exclure des membres qui ne sont pas pertinents pour la commande, ce qui pourrait introduire des complications.
En fin de compte, la décision d'utiliser cette approche devrait être basée sur ses implications en termes de performances. Bien que cela simplifie certainement le code de l'opérateur, des problèmes surgissent si le profilage indique une opération de comparaison fastidieuse. Sinon, la facilité d'entretien peut l'emporter sur les inconvénients potentiels.
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!