Tôi đang cố gắng tạo ra một cấu trúc đồ thị chung, nhưng tôi đang chạy vào sự phụ thuộc vòng tròn này giữa các đỉnh và các cạnh. Tôi định nghĩa các lớp Vertex và Edge của mình như vậy:
template<typename EdgeType>
struct Vertex {
std::vector<EdgeType> successors;
};
template<typename EdgeCostType, typename VertexWrapper>
struct Edge {
EdgeCostType cost;
VertexWrapper source;
VertexWrapper dest;
};
Tôi muốn khởi tạo nó bằng một cái gì đó như thế Vertex<Edge<int, std::shared_ptr<decltype(v)>>> v;
, nhưng rõ ràng là tôi không thể. Tôi có thể làm gì để giải quyết sự phụ thuộc vòng tròn này?
Biên tập:
Tôi nghĩ vấn đề này giải quyết vấn đề là sử dụng mẫu hiện tại làm tham số mẫu cho một trong các tham số mẫu của mẫu hiện tại, ví dụ: làm thế nào để làm một cái gì đó như thế này:
template<typename VertexWrapper>
struct Vertex {
std::vector<pair<int, VertexWrapper<Vertex>>> successors;
};
template <typename> typename VertexWrapper
VertexWrapper
đối số kiểu luôn được cho là có dạng std::shared_ptr<decltype(v)>
hay some_template_here<decltype(v)>
không?
template <typename> class VertexWrapper
? Ngoài ra, tại sao bạn có cả thẻ C ++ 11 và C ++ 17? Tiêu chuẩn nào bạn đang nhắm mục tiêu?