一般的なグラフ構造を作成しようとしていますが、頂点とエッジの間の循環依存関係に遭遇しています。私はVertexクラスとEdgeクラスを次のように定義します。
template<typename EdgeType>
struct Vertex {
std::vector<EdgeType> successors;
};
template<typename EdgeCostType, typename VertexWrapper>
struct Edge {
EdgeCostType cost;
VertexWrapper source;
VertexWrapper dest;
};
のようなものでインスタンス化したいのですがVertex<Edge<int, std::shared_ptr<decltype(v)>>> v;
、明らかにできません。この循環依存関係を解決するにはどうすればよいですか?
編集:
この問題の要約は、現在のテンプレートを現在のテンプレートのテンプレートパラメータの1つに対するテンプレートパラメータとして使用することです。
template<typename VertexWrapper>
struct Vertex {
std::vector<pair<int, VertexWrapper<Vertex>>> successors;
};
@HolyBlackCat Afaikは両方に適用されますが、最新のものだけを使用する必要がありますか?また、私はあなたが何を意味しているのか
—
わかり
template <typename> typename VertexWrapper
された
—
クルミ
VertexWrapper
型の引数は、常にフォームのことになってstd::shared_ptr<decltype(v)>
かsome_template_here<decltype(v)>
?
@walnutそれはshared-ptr / unique_ptr / something with operator->のようなものである必要があります
—
Simon Berens
私はこの質問の権利を読んでいる場合は、「テンプレートテンプレート」パラメータに見たいと思うかもしれません stackoverflow.com/questions/213761/...
—
ジョー・
template <typename> class VertexWrapper
?また、なぜC ++ 11とC ++ 17の両方のタグがあるのですか?どの標準をターゲットにしていますか?