Estoy tratando de hacer una estructura gráfica genérica, pero me encuentro con esta dependencia circular entre vértices y bordes. Defino mis clases Vertex y Edge así:
template<typename EdgeType>
struct Vertex {
std::vector<EdgeType> successors;
};
template<typename EdgeCostType, typename VertexWrapper>
struct Edge {
EdgeCostType cost;
VertexWrapper source;
VertexWrapper dest;
};
Me gustaría crear una instancia con algo así Vertex<Edge<int, std::shared_ptr<decltype(v)>>> v;
, pero obviamente no puedo. ¿Qué puedo hacer para resolver esta dependencia circular?
Editar:
Creo que este problema se reduce a usar la plantilla actual como parámetro de plantilla para uno de los parámetros de plantilla de la plantilla actual, por ejemplo, cómo hacer algo como esto:
template<typename VertexWrapper>
struct Vertex {
std::vector<pair<int, VertexWrapper<Vertex>>> successors;
};
template <typename> typename VertexWrapper
VertexWrapper
supone que el argumento tipo siempre tiene la forma std::shared_ptr<decltype(v)>
o some_template_here<decltype(v)>
?
template <typename> class VertexWrapper
? Además, ¿por qué tiene las etiquetas C ++ 11 y C ++ 17? ¿Qué estándar estás apuntando?