Partage
  • Partager sur Facebook
  • Partager sur Twitter

Comment gérer l'ADL ?

20 mai 2022 à 12:46:57

Bonjour, j'ai une question par rapport à l'ADL.

On m'a toujours dit qu'il fallait préfixer tous les appels de fonction avec le namespace en question pour que le code soit plus clair, pour bien voir où se trouve la fonction, de quelle libraire elle provient, etc. C'est donc une habitude que j'ai prise, mais je viens de tomber sur un truc bizarre, qui est tout simplement que j'ai oublié de mettre sf:: et pourtant le code a compilé et ça fonctionnait, et ce n'est que après que je me suis rendu compte que j'avais oublié de mettre sf::. J'ai donc vu que c'était à cause de l'ADL qui est allé cherché dans la fonction dans le namespace sf car je lui passait un objet qui provenait du namespace sf. Mais c'est n'importe quoi ? ça veut dire que je peux complètement appeler sans préfixer une fonction de la SFML du moment qu'elle prend en paramètre un objet de la SFML, et sans même mettre de using namespace.

Donc ma première question c'est comment faire pour avoir un avertissement comme quoi j'ai oublié de préfixer l'appel de la fonction, puisque comme je l'ai dit je préfère que les choses soient claires et explicites.

Mais ça nous amène à un deuxième problème qui est que peut être qu'en fait (accrochez vous), on ne veut pas préciser de quel namespace provient la fonction. Pourquoi ? Car peut être que l'ADL va trouver une meilleure spécialisation dans un autre namespace, d'où l'intérêt de ne pas le préciser (voir cet article https://h-deb.clg.qc.ca/Sujets/Divers--cplusplus/argument_dependent_lookup.html)

Donc au final si on ne préfixe pas on ne sait pas d'où vient la fonction donc le code est moins clair, et il peut y avoir des ambiguités et si on préfixe on perd la possibilité de trouver une meilleure spécialisation dans un autre namespace. Donc il faut faire quoi ?

  • Partager sur Facebook
  • Partager sur Twitter
20 mai 2022 à 14:37:26

il y a des explications ici :

https://en.cppreference.com/w/cpp/language/adl

-
Edité par bacelar 20 mai 2022 à 14:37:45

  • Partager sur Facebook
  • Partager sur Twitter
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.