Nodes
and Top
、Middle
and
の使用法を示していませんBottom
が、見た目からすると、いくつかの理由から、これを機能させることはできないと思います。
最も重要な理由は単純です: astd::vector<Node>
はタイプ のオブジェクトのみを含むことができますNode
。Top
タイプ、
のオブジェクトは、挿入するMiddle
とBottom
スライス ( に変換Node
) されるため、派生型が失われます。
そしてstruct Top : public
std::vector<Top>
、不完全な型に対してベクトルをインスタンス化することはできず、インスタンス化されていないテンプレートから派生させることはできないため、次のようなことはできません(それがあなたが望むことだとは思いません)。
The usual solution for this is to create a Tree
class, and use
std::vector<Node*>
in the nodes (as a member, not via
inheritance). Alternatively, you can use Boost's pointer vector
(but be careful of lifetime of the objects), or if you know that
you'll never need back pointers, you can use
std::vector<std::unique_ptr<Node>>
(but the interface becomes
a little trickier, and you still need to be careful about the
lifetime of objects—removing an object from the tree will
destroy it).