Estou tentando criar uma estrutura de gráfico genérica, mas estou enfrentando essa dependência circular entre vértices e arestas. Eu defino minhas classes Vertex e Edge da seguinte forma:
template<typename EdgeType>
struct Vertex {
std::vector<EdgeType> successors;
};
template<typename EdgeCostType, typename VertexWrapper>
struct Edge {
EdgeCostType cost;
VertexWrapper source;
VertexWrapper dest;
};
Eu gostaria de instanciar isso com algo do tipo Vertex<Edge<int, std::shared_ptr<decltype(v)>>> v;
, mas obviamente não posso. O que posso fazer para resolver essa dependência circular?
Editar:
Eu acho que esse problema se resume em usar o modelo atual como um parâmetro de modelo para um dos parâmetros do modelo atual, por exemplo, como fazer algo assim:
template<typename VertexWrapper>
struct Vertex {
std::vector<pair<int, VertexWrapper<Vertex>>> successors;
};
template <typename> typename VertexWrapper
VertexWrapper
argumento de tipo sempre deve ter a forma std::shared_ptr<decltype(v)>
ou some_template_here<decltype(v)>
?
template <typename> class VertexWrapper
? Além disso, por que você tem as tags C ++ 11 e C ++ 17? Qual padrão você está alvejando?