structmy_custom{structrb_noderbnode;...// other fields};
On insère les rbnode dans l'arbre avec un rb_insert. Et on utilise la macro magique container_of pour récupérer l'adresse de my_custom en faisant un truc du genre
container_of(ptr,structmy_custom,rbnode);
Évidemment, à ce moment, si quelqu'un a introduit un truc qui n'est pas de type my_custom dans le rbtree, ça va faire n'importe quoi. Et il n'y a rien qui l'empêche (à par la vigilance des reviewers).
Je n'irai pas jusqu'à dire que c'est une solution simple :) Élégante peut être pour une certaine définition de l'élégance. Mais clairement pas type-safe là ou on pourrait "sans problème" avoir une solution type-safe en C++.
[^] # Re: ==
Posté par zul . En réponse au journal OSv : l'OS pour les nuages. Évalué à 7.
Une variante du void*.
L'idée c'est un truc du genre
On insère les rbnode dans l'arbre avec un rb_insert. Et on utilise la macro magique container_of pour récupérer l'adresse de my_custom en faisant un truc du genre
Évidemment, à ce moment, si quelqu'un a introduit un truc qui n'est pas de type my_custom dans le rbtree, ça va faire n'importe quoi. Et il n'y a rien qui l'empêche (à par la vigilance des reviewers).
Pour info, container_of, c'est
Je n'irai pas jusqu'à dire que c'est une solution simple :) Élégante peut être pour une certaine définition de l'élégance. Mais clairement pas type-safe là ou on pourrait "sans problème" avoir une solution type-safe en C++.