質問: parent; } void InsertChild(U item); private: T m_parent; std::vector m_children; } template class fileItem : public folderItem{ public: fileItem(T parent) : folderItem(parent) { } } 上記のような、親子関係を持つテンプレートクラスを作りたいのですが、インスタンスの生成時に困っています。 (理想) folderItem item; folderItem item; (現実) fileItem< folderItem< folderItem<.........,fileItem
回答: 他の人が書いてる通り,根本的に設計が間違っているのだけれど,無理やりこのままの設計でやってみるとする. 理想から察するに,ある`FolderItem branch`は別の`FolderItem root`の子で,それ自身の子としていくつかの`FileItem`を持つように作りたいのだろうけれど... * トップレベルの`FolderItem root`を作るには,親には`nullptr_t`を置くとして,どうしても一つ下の`FolderItem branch`の完全型が必要 * `FolderItem branch`を作るためには,親となる`FolderItem root`の完全型と,子となる`FileItem`の完全型が必要 * 一番末端の`FileItem`は,子供の型は`nullptr_t`にすればいいとしても,親となる`FolderItem branch`の完全型が必要 となっていて,どうやっても型定義ができないように思える. 素直に設計を見直すのが手っ取り早いし,見直すべきコードだと思う.