누군가 공개 구조 대신 튜플을 사용하여 here을 제안했습니다. 그리고 나는 그것이 유용하다는 것을 알았다. 하지만 이제 내 문제는 다음 섹션과 같습니다 :템플릿 인수의 순환 종속성
using Edge = std::tuple<Node_wp,//From Node
Node_wp>;//To Node
using Edge_wp = std::weak_ptr<Edge>;
using Node = std::tuple<std::vector<Edge_wp>,//Incoming Edges
std::vector<Edge_wp>>;//Outgoing Edges
using Node_wp = std::weak_ptr<Node>;
템플릿 매개 변수에서이 순환 종속성을 어떻게 극복 할 수 있습니까? Edge 노드는 노드 유형을 알지 못해서 형성 될 수 없기 때문에 Forward 선언 (소유하고있는 지식으로)은 작동하지 않습니다.
분명히 나는 그들 중 하나를 struct
로 만들 수 있습니다. 그러나 접근에서 대칭을 깨뜨리는 것은 추악 할 것이다.
링크 된 답을 읽어 didnt는하지만, 난 그냥 튜플을 통해 구조체를 선호 전제에 동의하지 않는다. 가장자리가'Node_wp's를 연결한다면 왜 그렇게 선언하지 않겠습니까? 또한'from_node'와'to_node'는'first'와'second'보다 훨씬 좋은 이름이 될 것입니다. – user463035818
@ tobi303 그들은 'enum'을 사용하여 가독성을 제안합니다. 그러나 여기서 실제로 잡는 것은 이미 '튜플'(또는 튜플을 지원하는 라이브러리)의 일부인 멤버 함수 (정렬, 평등, 직렬화 등)를 구현하는 것이 아닙니다. – ifyalciner