Forum QtFR

La communauté francophone Qt

Vous n'êtes pas identifié(e).

Annonce

Qt 4: 4.8.4 - Qt 5: 5.0.2 - Qt Creator: 2.7.0 - Qt Installer: 1.3.0 - VS Qt 4: 1.1.11 - VS Qt 5: 1.2.1 - Monkey Studio: 1.9.0.4

#1 21-02-2012 11:20:30

myrddin772
Modérateur Qt
Inscription : 13-03-2010
Messages : 682

[Résolu] Elements anonymes en C++

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 cool big_smile

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

#2 21-02-2012 12:57:55

PapaJaac
Administrateur Qt
Lieu : Bordeaux
Inscription : 08-12-2008
Messages : 1 683

Re : [Résolu] Elements anonymes en C++

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

#3 21-02-2012 14:41:35

myrddin772
Modérateur Qt
Inscription : 13-03-2010
Messages : 682

Re : [Résolu] Elements anonymes en C++

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

#4 29-02-2012 19:08:24

Nicolas SOUCHON
Administrateur Qt
Inscription : 28-07-2007
Messages : 3 154

Re : [Résolu] Elements anonymes en C++

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

#5 29-02-2012 23:13:58

myrddin772
Modérateur Qt
Inscription : 13-03-2010
Messages : 682

Re : [Résolu] Elements anonymes en C++

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 hmm )


"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

#6 01-03-2012 01:01:10

Nicolas SOUCHON
Administrateur Qt
Inscription : 28-07-2007
Messages : 3 154

Re : [Résolu] Elements anonymes en C++

myrddin772 a écrit :

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

#7 01-03-2012 01:27:08

myrddin772
Modérateur Qt
Inscription : 13-03-2010
Messages : 682

Re : [Résolu] Elements anonymes en C++

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

#8 01-03-2012 10:56:17

shaoyin
Membre(e) Qt
Inscription : 27-09-2011
Messages : 56

Re : [Résolu] Elements anonymes en C++

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 hmm .

Hors ligne

#9 01-03-2012 14:39:51

Nicolas SOUCHON
Administrateur Qt
Inscription : 28-07-2007
Messages : 3 154

Re : [Résolu] Elements anonymes en C++

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 !

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

#10 01-03-2012 15:10:22

myrddin772
Modérateur Qt
Inscription : 13-03-2010
Messages : 682

Re : [Résolu] Elements anonymes en C++

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

#11 01-03-2012 15:14:05

Nicolas SOUCHON
Administrateur Qt
Inscription : 28-07-2007
Messages : 3 154

Re : [Résolu] Elements anonymes en C++

Nicolas SOUCHON a écrit :
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

#12 01-03-2012 15:37:38

Nicolas SOUCHON
Administrateur Qt
Inscription : 28-07-2007
Messages : 3 154

Re : [Résolu] Elements anonymes en C++

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

#13 01-03-2012 16:38:01

myrddin772
Modérateur Qt
Inscription : 13-03-2010
Messages : 682

Re : [Résolu] Elements anonymes en C++

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

#14 01-03-2012 18:03:23

Nicolas SOUCHON
Administrateur Qt
Inscription : 28-07-2007
Messages : 3 154

Re : [Résolu] Elements anonymes en C++

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

#15 01-03-2012 18:15:45

shaoyin
Membre(e) Qt
Inscription : 27-09-2011
Messages : 56

Re : [Résolu] Elements anonymes en C++

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

#16 01-03-2012 18:32:59

Nicolas SOUCHON
Administrateur Qt
Inscription : 28-07-2007
Messages : 3 154

Re : [Résolu] Elements anonymes en C++

pour "enfoncer le clou"

je conseille de privilégier la syntaxe sizeof(var) plutôt que sizeof(type)
eg:

Hors ligne

#17 01-03-2012 19:12:28

myrddin772
Modérateur Qt
Inscription : 13-03-2010
Messages : 682

Re : [Résolu] Elements anonymes en C++

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

Pied de page des forums


Sitemap QtFR