8
votes

Pourquoi utiliser statique si dans D?

J'ai lu sur le système de modèle dans la langue D et est venu sur une construction inhabituelle, statique si .

De ce que j'ai réussi à saisir, il est évalué à l'heure de la compilation, mais d'après ce que j'ai cherché, l'exemple montré ici Ne m'éclaircit pas vraiment. xxx

Qu'est-ce que statique si faire et quand dois-je l'utiliser?


7 commentaires

n'a pas reçu ce que vous attendez réellement, s'il vous plaît élaborer le problème


@R. Martinho Fernandes de ce que je sais que ceci est conçu comme une superseed de C ++


@ aravind.udayashankara Je ne comprends pas vraiment ce que la statique est-elle.


@Coredump Si vous voulez dire "superset", alors non. D est nulle part près d'un superset de C ++.


@Coredump: Pas exactement. D n'est pas un surseed de C ++. Les deux c ++ et D sont dépassés de C (dans le sens qui permettent de lier les fonctions C et de prendre en charge le même modèle d'expression) avec une compatibilité introductible différente de c


C'est discutable. Je serais en fait accepter d'étendre. Nom Une fonction de langue C ++ que D n'a pas. Je peux, d'autre part, énumérer quelques fonctionnalités D que c ++ n'a pas (et n'aura probablement jamais).


Alors que si @Coredump signifie " Supersede ", alors nous ne pouvons que rêver de la journée ...


4 Réponses :


13
votes

Le d statique si est la base de "compilation conditionnelle" et joue un rôle important partout où une décision de temps de compilation concernant une variante d'un code doit être prise.

depuis D ne pas t avoir un préprocesseur, des choses comme xxx

peuvent devenir xxx

De même, la métaprogrammation peut également se produire via statique si: < / p> xxx

peut être xxx


4 commentaires

Merci. Je pense que ce qui me confondait était la fonction comme l'utilisation.


D'ailleurs. Premier exemple ne compilera pas. Pour cela d a la version (xxx) {} else {}


Cela dépend de ce que XXX est réellement: s'il s'agit d'un symbole, la version est la déclaration, s'il s'agit d'une expression constante static_if fonctionne. Le bon exemple n'est probablement pas #Ifdef ... mais #if ....


Alors pourquoi ne le change-tu pas dans votre réponse?



4
votes

2 commentaires

Factorial n'est pas une fonction de modèle. C'est un modèle éponyme. Les utilisations du gabarit sont remplacées par le résultat du gabarit qui est le symbole à l'intérieur du modèle avec le même nom que le modèle - E.G. Factorial! 5 devient 120 . C'est entièrement une construction de temps compilée. Ceci est complètement différent d'une fonction modélisée qui s'appelle toute autre fonction mais est instanciée avec différemment en fonction des types de ses arguments. Basé sur votre réponse, je suppose que vous le comprenez et que vous avez juste la terminologie erronée, mais vous allez causer de la confusion telle quelle.


Correct. :) Je vais mettre à jour ma réponse afin que la terminologie ait raison.



3
votes

1 commentaires

Walter a également touché statique si dans l'une de ses présentations, j'ai juste oublié lequel ... :)



0
votes

Andrei Alexandrescu a récemment appelé l'utilisation intelligente de statique si "conception par introspection", avec quelques excellents exemples ( vidéo , Diapositives ) .

Un exemple direct de sa conversation mettrait en œuvre un conteneur générique tel qu'une table de hachage utilisant Robin Hood hachage, où une donnée supplémentaire (nombre de sonde) est conservée à chaque entrée de la table. Avec statique si Nous pouvons optimiser la mémoire automatiquement en plaçant le nombre de sonde à côté de la touche en fonction de son alignement, optimisez la largeur d'entier pour le type d'index, etc.

paraphrasé de la conversation : xxx


0 commentaires