Ich versuche, eine generische Diagrammstruktur zu erstellen, aber ich stoße auf diese kreisförmige Abhängigkeit zwischen Scheitelpunkten und Kanten. Ich definiere meine Vertex- und Edge-Klassen folgendermaßen:
template<typename EdgeType>
struct Vertex {
std::vector<EdgeType> successors;
};
template<typename EdgeCostType, typename VertexWrapper>
struct Edge {
EdgeCostType cost;
VertexWrapper source;
VertexWrapper dest;
};
Ich würde es gerne mit so etwas instanziieren Vertex<Edge<int, std::shared_ptr<decltype(v)>>> v;
, aber ich kann es offensichtlich nicht. Was kann ich tun, um diese zirkuläre Abhängigkeit aufzulösen?
Bearbeiten:
Ich denke, dieses Problem besteht darin, die aktuelle Vorlage als Vorlagenparameter für einen der Vorlagenparameter der aktuellen Vorlage zu verwenden, z. B. wie man so etwas macht:
template<typename VertexWrapper>
struct Vertex {
std::vector<pair<int, VertexWrapper<Vertex>>> successors;
};
template <typename> typename VertexWrapper
VertexWrapper
Typargument immer die Form haben std::shared_ptr<decltype(v)>
oder some_template_here<decltype(v)>
?
template <typename> class VertexWrapper
? Warum haben Sie sowohl C ++ 11- als auch C ++ 17-Tags? Auf welchen Standard zielen Sie ab?