2013-11-24 3 views
7

문제는 이전에 여러 번 논의하고있다. 하나는 필요로하는 경우해야 할 일 :그래프/트리 구현

struct Node 
{ 
    ::std::vector<Node> nodes_; 
}; 

here에서 하나 Node*에 (스마트) 포인터가 정식 해결책이 될 수 있다는 인상을 가져옵니다. 이는 약간의 간접 참조와 그에 상응하는 성능 저하를 의미합니다. here에서, 우리는 T하지 libc++ 불완전한 형태이지만, 어디 libstdc++::std::vector<T> 인스턴스 생성을 지원하는, 참조하십시오. 이것은 거의 휴대용이 아닙니다. 그러나 하나의 솔루션은 불완전한 유형을 지원하는 휴대 가능한 ::std::vector 닮은 컨테이너 일 수 있습니다. 마지막으로 다음을 할 수 있습니다 :

template <::std::size_t I = 0> 
struct Node 
{ 
    ::std::vector<Node<I + 1> > nodes_; 
}; 

template <> 
struct Node<20> 
{ 
}; 

그래프/트리에 제한이 있습니다. 추가 해결 방법으로 인해 Node::std::vector<Node> nodes_;의 선언의 시점에서 불완전한 유형을 Node의 포함되어 있지만 사실로 존재합니까?

+0

이에 대한 부스트 라이브러리가있다. – zch

+0

@zch 의견을 작성 하시겠습니까? 받아 들일거야. – user1095108

답변

2

Boost containers 핸들 불완전한 유형 및 휴대용입니다.

그래서 노드가 될 수 있습니다 : http://www.boost.org/doc/libs/1_48_0/doc/html/container/containers_of_incomplete_types.html :

#include <boost/container/vector.hpp> 

struct Node 
{ 
    boost::container::vector<Node> nodes_; 
};