Mmmh, c'est pour bricoler des trucs avec des templates? Parce que je ne vois pas trop ce que tu peux faire du x, la variable n'a aucun sens, si?
La variable n'a aucun sens dans le cas de void, mais dans les autres cas si, donc justement cela induit une exception dans le système des types qui est tout à fait nuisible à la programmation générique.
Par exemple, essayons de définir un slot qui contient une fonction et une valeur sur laquelle appeler la fonction.
La première utilisation slot<int,int> fonctionne tandis que slot<void,void> explose!
L'exemple de la définition de slot est très instructif parceque si on essaie d'en faire une solution robuste et générale, il faut:
— utiliser des types proxies (des templates dont le seul rôle est de définir des types) parcequ'on passe les int, les pointeurs et les références par valeur mais les valeurs de la plupart des autres types par référence;
— utiliser des call proxies pour encapsuler les appels à f(x) (à cause du void);
— utiliser des constructeurs divers et variés parcequ'on a bien envie de pouvoir passer des pointeurs vers membres dans nos slots.
Au final on arrive à un code très long et pas très lisible, pour faire correctement ce qui dans le cas général prend 6 lignes.
[^] # Re: void et les templates?
Posté par Michaël (site web personnel) . En réponse à la dépêche Le langage D. Évalué à 4.
La variable n'a aucun sens dans le cas de void, mais dans les autres cas si, donc justement cela induit une exception dans le système des types qui est tout à fait nuisible à la programmation générique.
Par exemple, essayons de définir un slot qui contient une fonction et une valeur sur laquelle appeler la fonction.
La première utilisation
slot<int,int>fonctionne tandis queslot<void,void>explose!L'exemple de la définition de
slotest très instructif parceque si on essaie d'en faire une solution robuste et générale, il faut:— utiliser des types proxies (des templates dont le seul rôle est de définir des types) parcequ'on passe les
int, les pointeurs et les références par valeur mais les valeurs de la plupart des autres types par référence;— utiliser des call proxies pour encapsuler les appels à
f(x)(à cause duvoid);— utiliser des constructeurs divers et variés parcequ'on a bien envie de pouvoir passer des pointeurs vers membres dans nos
slots.Au final on arrive à un code
trèslong et pas très lisible, pour faire correctement ce qui dans le cas général prend 6 lignes.