標準ライブラリは一般に、不完全な型をサポートしていない (する必要がある) と思います。
私が覚えているように、Boost Container ライブラリは明示的にこれをサポートしています。
標準コンテナはどうですか?Matt Austern の素晴らしい記事 ( The Standard Librarian: Containers of Incomplete Types )で説明されているように、不完全な型のコンテナーは長い間議論されてきました。
「私のコラムのほとんどとは異なり、これは C++ 標準ライブラリではできないこと、つまり不完全な型を標準コンテナーの 1 つに入れることについてです。このコラムでは、なぜこれを行う必要があるのか、なぜ標準化委員会はそれが有用であることを知っていたにもかかわらずそれを禁止したのか、そして制限を回避するために何ができるのかを説明します。」</p>
Boost.Container によって提供されるすべてのコンテナーを使用して、再帰コンテナーを定義できます。
Coliruでライブを見る
#include <boost/container/vector.hpp>
#include <boost/container/list.hpp>
#include <boost/container/map.hpp>
#include <boost/container/stable_vector.hpp>
#include <boost/container/string.hpp>
using namespace boost::container;
struct data
{
int i_;
vector<data> v_; //A vector holding still undefined class 'data'
list<data> l_; //A list holding still undefined 'data'
map<data, data> m_; //A map holding still undefined 'data'
friend bool operator <(const data &l, const data &r)
{ return l.i_ < r.i_; }
};
struct tree_node
{
string name;
string value;
//children nodes of this node
list<tree_node> children_;
};
int main()
{
//a container holding a recursive data type
stable_vector<data> sv;
sv.resize(100);
//Let's build a tree based in
//a recursive data type
tree_node root;
root.name = "root";
root.value = "root_value";
root.children_.resize(7);
return 0;
}