12
votes

Polymorphisme par paramètre de fonction

OK - cela peut être une question très stupide, mais cela me dérange bien.

y a-t-il une langue où xxx

donnerait "faire des singe" ? (veuillez porter avec moi en utilisant la syntaxe C ++) Pour clarifier, je veux "une fonction qui accepte un argument et agit en fonction du type de l'argument".

et aurait-il un sens? Bien sûr, en tant que développeur, vous devez prendre soin de vous aider, car les instances qui ressemblent à un pointeur animalier pourraient effectivement appeler le code APE, car à l'exécution, une instance singe est signalée.


0 commentaires

5 Réponses :


1
votes

Potentiellement, mais ce ne serait pas C ++ puisque la fonction de surcharge des fonctions en C ++ est effectuée à l'heure de la compilation, pas d'exécution, comme ce serait requis ici. Il nécessiterait une langue dynamique qui permet un allusion et une surcharge de type.


5 commentaires

Eh bien, je sais que c ++ ne prend pas en charge la fonctionnalité que je suis "Sorteta" à la recherche de. La pensée vient de venir à moi lors de la codage en C ++. Est-ce ce qui fait la différence entre les langues dynamiques / statiques?


Oui. Les langues dynamiques font leurs chèques de type / attributs à l'exécution au lieu de compilation. Il ralentit un peu leur opération, mais permet une plus grande flexibilité.


Non Non Non Non - Vous pouvez avoir une langue très dynamique (dire python) qui ne supporte pas cela hors de la boîte ... Vous devez utiliser un addon spécial "multimethods".


C ++ pourrait Supporte la recherche sur les paramètres de la fonction. Cela ne fait pas partie des raisons de performance.


@Steven: Python ne supporte ni l'indication de type ni surcharge, donc je ne suis pas surpris.



1
votes

Il y a une incohérence ici qui est déroutante. Voulez-vous une fonction qui accepte un argument et agit en fonction du type de l'argument? Ce ne serait pas vraiment un polymorphisme car les fonctions sont sur leur solitaire, elles ne sont pas des méthodes appartenant à une hiérarchie de classe ou d'interface. En d'autres termes, son genre de mélange de paradigmes de OO avec des paradigmes procéduraux.

Si c'est le type que vous souhaitez paramétrer et non la variable, vous utiliseriez quelque chose comme des génériques Java. Avec des génériques, vous pouvez informer une méthode que le type du paramètre à venir sera également variable. La méthode agit sur le type de variable de manière générique.


1 commentaires

Nice description de la fonctionnalité que je recherche - J'étais tellement audacieuse de la mettre dans une édition de mon problème. Vous avez raison - le polymorphisme est probablement un mauvais terme, mais aucun autre n'est tombé à travers mon esprit.



7
votes

Oui, il y en a! C'est ce qu'on appelle Dispatch multiple . L'article Wikipedia est très bon. Malheureusement, il semble seulement être soutenu par des extensions linguistiques pour les langues les plus populaires, mais il y a quelques langues (principalement éternelles) qui le soutiennent de manière native.


2 commentaires

Lisp commun ... pourquoi c'est une surprise (non!);) Merci de clarification à terme et du lien Wikipedia!


Il est presque triste de devoir le classer comme étant ésotérique :-p



1
votes

Ouvrir les multi-méthodes pour C ++ , par Peter Pirkelbauer, Yuriy Solodkyy et Bjarne Stroustrup.

Ce document aborde une extension linguistique pour intégrer plusieurs méthodes en C ++ avec des détails de mise en œuvre très intéressants, tels que la gestion des bibliothèques chargées de manière dynamique et la disposition réelle de l'envoi correctement. Notez qu'il ne fait pas encore partie de la norme C ++, et probablement pas une partie de tout compilateur majeur.


0 commentaires

7
votes

Jetez un coup d'œil au modèle de visiteur


1 commentaires

Pour les langues qui ne prennent pas en charge de multiples schémas de visiteur de l'envoi et / ou de la correspondance des motifs sont probablement la meilleure solution.