Someone suggested here using tuples instead of all public structures. And I found it useful. But my problem is now with the following section:
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>;
How can I overcome this circular dependency in template parameters. Forward declaration (with the knowledge in my possession) won't work since type Edge is can not be formed without knowing type Node and visa versa.
Obviously I can make one of them struct
and be done with it. But it will be ugly to break symmetry in access.