Vous n'êtes pas identifié(e).
Qt 4: 4.8.4 - Qt 5: 5.0.2 - Qt Creator: 2.7.1 - Qt Installer: 1.3.0 - VS Qt 4: 1.1.11 - VS Qt 5: 1.2.1 - Monkey Studio: 1.9.0.4
Pages : 1
Bonjour, bonjour,
Dans mes pérégrinations j'avais découvert les namespaces anonymes et, pour être franc, je n'en avais pas bien compris l'utilité.
Mais voilà que je découvre les structures anonymes... j'avoue que j'en vois encore moins l'utilité...
Il semble (http://linuxfr.org/forums/programmation … re-anonyme) que l'on puissent même les allouer en renvoyer des tableau de pointeur vers ces structures anonymes...
Quelqu'un saurait-il quoi que ce soit la dessus ?
Quelqu'un aurait-il déjà utiliser des structures anonymes ? dans quel type de projet ? dans quel but ?
P.S. : oui, je sais, en ce moment, je suis en mode philosophal

Dernière modification par myrddin772 (01-03-2012 19:13:39)
"L'informatique n'est pas plus la science des ordinateurs que l'astronomie n'est celle des télescopes." Michael R. Fellows et Ian Parberry
Si tu ne sais pas : demande, si tu sais : partage !
Hors ligne
Bonjour !
J'avais vu passer cela dans un programme système (un pilote de scanner je crois), un membre d'une classe était une union de 2 structures anonymes. Celles-ci étaient anonyme parce qu'utilisées seulement à cet endroit.
En dehors de cet usage j'imagine une structure anonyme isolée comme une sorte de variable complexe unique.
Hors ligne
Mouais... il faudra que je me renseigne... parce que je ne comprends pas bien l'utilité...
Pourquoi ne pas utiliser une structure privée à ce moment là ? peut-être un mix entre structure privée et une structure singleton ?
Dernière modification par myrddin772 (21-02-2012 14:41:51)
"L'informatique n'est pas plus la science des ordinateurs que l'astronomie n'est celle des télescopes." Michael R. Fellows et Ian Parberry
Si tu ne sais pas : demande, si tu sais : partage !
Hors ligne
un exemple tout bête
il faut utiliser, eg:
avec une union anonyme, on peut utiliser une variable membre anonyme, eg:
note que, dans ce que j'ai vu, le mot anonyme est utilisé tantôt pour la variable, tantôt pour la structure / union
l'usage est simplifié:
Dernière modification par Nicolas SOUCHON (29-02-2012 19:51:55)
Hors ligne
J'ai bien vu cela... mais quelle en est l'utilité ?
parce qu'on pourrait simplement écrire :
et ça aurait la même fonction... sauf que dans ce cas, c'est une union donc les différents éléments occupent les "mêmes" emplacements en mémoire (enfin si j'ai bien compris
)
"L'informatique n'est pas plus la science des ordinateurs que l'astronomie n'est celle des télescopes." Michael R. Fellows et Ian Parberry
Si tu ne sais pas : demande, si tu sais : partage !
Hors ligne
et ça aurait la même fonction...
pas vraiment !!!
si on a besoin de toutes les données, on utilise une structure, eg:
dans l'exemple, le message est soit de type "init", soit de type "done", soit de type "crsp" ...
on n'a besoin que des données soit de Init, soit de Done, soit de Crsp ... a un instant
d'où l'utilisation d'une union pour la partie variable du message
Dernière modification par Nicolas SOUCHON (01-03-2012 14:50:07)
Hors ligne
Ok, je comprends pourquoi utiliser, dans ce cas, une union plutôt qu'une structure.
Mais ma question reste la même : quelle est l'utilité d'une structure ou union anonyme ?
"L'informatique n'est pas plus la science des ordinateurs que l'astronomie n'est celle des télescopes." Michael R. Fellows et Ian Parberry
Si tu ne sais pas : demande, si tu sais : partage !
Hors ligne
Pour revenir sur ton premier post, la première fois que j'ai vu une utilisation des namespaces anonymes, c'était dans un fichier ".cpp". L'utilité manifeste des namespaces anonymes (du moins dans ce que j'ai observé) est de simplifier la partie privée de ta classe exposée dans le header.
Cela te permet notamment de définir de manière masquée des fonctions et des données utiles au fonctionnement de la classe, mais qui sont sans intérêt pour l'utilisateur. Il faut le voir comme un moyen supplémentaire d'encapsulation.
Après, il y a peut-être d'autres utilités aux namespaces anonymes, mais je ne les ai pas encore trouvées !
Quant aux structures anonymes, je ne connaissais pas... Après quelques manips avec, je dois bien avouer que je ne saisis pas du tout l'intérêt non plus... Hormis peut-être de structurer une classe ou une structure en regroupant des données selon certains critères. Exemple (grossier !) :
Dans ce cas, l'avantage est qu'on n'a pas besoin de chercher un nom pour chaque catégorie, et que l'accès aux différentes variables est direct. Mais bon, je suis à moitié convaincu
.
Hors ligne
Après, il y a peut-être d'autres utilités aux namespaces anonymes, mais je ne les ai pas encore trouvées !
les "template" ont besoin de données "with external linkage", eg:
Dernière modification par Nicolas SOUCHON (01-03-2012 14:44:04)
Hors ligne
Je dois être à l'ouest mais je ne vois pas le rapport entre ce que tu viens de dire et les structure/union anonyme...
"L'informatique n'est pas plus la science des ordinateurs que l'astronomie n'est celle des télescopes." Michael R. Fellows et Ian Parberry
Si tu ne sais pas : demande, si tu sais : partage !
Hors ligne
shaoyin a écrit :Après, il y a peut-être d'autres utilités aux namespaces anonymes, mais je ne les ai pas encore trouvées !
Hors ligne
imagine un compilateur qui "fabrique des noeuds" structurés un peu comme ceci
pour acceder à une constante (node --> form --> constante, il faut écrire
en utilisant des unions anonymes
pour acceder à une constante (node --> form --> constante, il suffit d'écrire
et le code rest aussi clair, voire même plus, selon l'adage qui dit
trop d'information tue l'information
Dernière modification par Nicolas SOUCHON (01-03-2012 15:38:34)
Hors ligne
Ok !!!!!
L'utilisation des éléments (structure/union) anonyme permet de structurer une classe (ou une structure) sans surcharger le code... mais bon je rejoint shaoyin, je ne suis pas convaincu...
Et puis, quelle serait l'utilité du code que j'avais trouvé (et mis le lien dans le premier post, le revoilà : http://linuxfr.org/forums/programmation … re-anonyme) ?
"L'informatique n'est pas plus la science des ordinateurs que l'astronomie n'est celle des télescopes." Michael R. Fellows et Ian Parberry
Si tu ne sais pas : demande, si tu sais : partage !
Hors ligne
primo:
ce bout de code ne fonctionne pas parce que c'est trop tordu
Case est un type pointeur vers une structure (anonyme)
il n'y a pas de type pour designer ce vers quoi il pointe
d'où l'erreur dans le 3e malloc
devrait être
ce qui est syntaxiquement incorrect
mieux vaudrait avoir ecrit
qui serait plus clair
deuxio:
pour éviter ce genre de pb
fonctionnerait et montre que c'est visiblement tordu
Dernière modification par Nicolas SOUCHON (01-03-2012 18:10:24)
Hors ligne
Ce code n'est pas nécessairement efficace/maintenable/lisible/compréhensible (rayer la mention inutile), donc pas forcément une référence.
Au vu des commentaires, celui qui l'a écrit n'a manifestement pas tout pigé des allocations mémoire. En outre, son typedef de pointeur sur une structure anonyme est une aberration compte-tenu du fait qu'il compte allouer un tableau de cette structure. Il n'a donc aucun moyen par la suite d'en connaitre la taille dans son appel à malloc.
Bref, le fait qu'une structure anonyme apparaisse dans ce code me semble plus tenir de l'accident que d'un besoin réellement justifié. (Sans aucun mépris pour le programmeur qui l'a écrit, bien sûr ! On est tous passé par là).
edit : grillé par Nicolas, mais on est d'accord !
Dernière modification par shaoyin (01-03-2012 18:17:12)
Hors ligne
pour "enfoncer le clou"
je conseille de privilégier la syntaxe sizeof(var) plutôt que sizeof(type)
eg:
Hors ligne
ok, merci à vous deux !
"L'informatique n'est pas plus la science des ordinateurs que l'astronomie n'est celle des télescopes." Michael R. Fellows et Ian Parberry
Si tu ne sais pas : demande, si tu sais : partage !
Hors ligne
Pages : 1
| Liens interne à QtFR | Les partenaires de QtFR | Liens pour les sites officiels Qt | Liens sur les ressources Qt |
|---|---|---|---|
| Communauté QtFR sur Google+ | Monkey Studio | Télécharger Qt | Notre tutoriel |
| QtFR sur Twitter | ZeGrapher | Site officiel Qt | Documentation Qt |
| IRC box | Qt Blog | Qt Centre | |
| Galeries | Qt Wiki | Qt Apps | |
| Contactez-nous | Qt Quarterly |