Je ne vois pas bien la différence entre un type fantôme et un type (mais te fatigue pas je pense qu'il faudrait que je manipule tout ça pour commencer à comprendre _).
En réalité il y a un type fantôme avec lequel tu es déjà familier, c'est le void en C. On ne peut pas créer de valeurs de de type void par contre on peut créer des types dérivés, comme pointer to void – que je n'écris pas avec une petit étoile à cause du markdown.
Un type fantôme est juste un type qui est déclaré mais pas défini, comme dans
type my_first_fantom_type
On ne peut pas créer de valeurs de type my_first_fantom_type par contre on peut s'en servir pour paramétrer d'autres types. L'équivalent en C++ serait d'utiliser des templates et leurs spécialisation. J'essaie de traduire mon example OCaml en déclarations C++, mais mon C++ n'est plus tout frais:
Le paramètre de template, qui correspond au paramètre de type dans le cas de OCaml, sert uniquement à "documenter" l'API aux yeux du compilateur – mais je ne connais malheureusement aucune astuce en C++ pour rendre les types password<validation_pending>::type
et password<validation_done>::type incompatibles entre eux, donc la correspondance est imparfaite.
[^] # Re: ouai
Posté par Michaël (site web personnel) . En réponse au journal Données vs Code. Évalué à 6.
En réalité il y a un type fantôme avec lequel tu es déjà familier, c'est le void en C. On ne peut pas créer de valeurs de de type void par contre on peut créer des types dérivés, comme pointer to void – que je n'écris pas avec une petit étoile à cause du markdown.
Un type fantôme est juste un type qui est déclaré mais pas défini, comme dans
On ne peut pas créer de valeurs de type my_first_fantom_type par contre on peut s'en servir pour paramétrer d'autres types. L'équivalent en C++ serait d'utiliser des templates et leurs spécialisation. J'essaie de traduire mon example OCaml en déclarations C++, mais mon C++ n'est plus tout frais:
Le paramètre de template, qui correspond au paramètre de type dans le cas de OCaml, sert uniquement à "documenter" l'API aux yeux du compilateur – mais je ne connais malheureusement aucune astuce en C++ pour rendre les types
password<validation_pending>::typeet
password<validation_done>::typeincompatibles entre eux, donc la correspondance est imparfaite.