有人建议 here 使用元组而不是所有公共(public)结构。我发现它很有用。但我的问题现在出现在以下部分:
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>;
如何克服模板参数中的这种循环依赖。前向声明(根据我的知识)将不起作用,因为在不知道 Node 类型的情况下无法形成 Edge 类型,反之亦然。
显然我可以制作其中之一
struct
并完成它。但是在访问中打破对称性将是丑陋的。 最佳答案
您可以使用 struct
和公共(public)继承来解决循环依赖问题。 Node
将成为 struct
周围的 std::tuple
包装器:
#include <memory>
#include <tuple>
#include <vector>
struct Node;
using Node_wp = std::weak_ptr<Node>;
using Edge = std::tuple<Node_wp, // From Node
Node_wp>; // To Node
using Edge_wp = std::weak_ptr<Edge>;
struct Node : std::tuple<std::vector<Edge_wp>, // Incoming Edges
std::vector<Edge_wp>> // Outgoing Edges
{
using std::tuple<std::vector<Edge_wp>, std::vector<Edge_wp>>::tuple;
};
关于c++ - 模板参数中的循环依赖,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46767470/