Quelqu'un a suggéré here en utilisant des tuples au lieu de toutes les structures publiques. Et je l'ai trouvé utile. Mais mon problème est maintenant avec la section suivante:Dépendance circulaire dans les arguments de modèle
using Edge = std::tuple<Node_wp,//From Node
Node_wp>;//To Node
using Edge_wp = std::weak_ptr<Edge>;
using Node = std::tuple<std::vector<Edge_wp>,//Incoming Edges
std::vector<Edge_wp>>;//Outgoing Edges
using Node_wp = std::weak_ptr<Node>;
Comment puis-je surmonter cette dépendance circulaire dans les paramètres de modèle. La déclaration en avant (avec la connaissance en ma possession) ne fonctionnera pas puisque le type Bord ne peut pas être formé sans connaître le type nœud et vice versa.
Évidemment, je peux faire l'un d'entre eux struct
et être fait avec. Mais il sera moche de briser la symétrie dans l'accès.
na pas lu la réponse liée, mais je suis en désaccord avec la prémisse, juste préférer struct sur tuples. Si votre edge connecte 'Node_wp's alors pourquoi ne pas le déclarer comme tel? De plus, 'from_node' et' to_node' seraient de bien meilleurs noms que 'first' et' second'. – user463035818
@ tobi303 Ils suggèrent d'utiliser 'enum' pour plus de lisibilité. Mais la vraie capture ici n'est pas l'implémentation des fonctions membres (tri, égalité, sérialisation, etc.) qui font déjà partie de 'tuple' (ou bibliothèques supportant tuple). – ifyalciner