#pragma once #include #include namespace pangolin { template struct TreeNode { struct Edge { TEdge parent_child; TreeNode node; }; T item; std::vector edges; }; template using NodeFunction = std::function&,const TEdge&)>; //template //void VisitDepthFirst(TreeNode& node, const NodeFunction& func, const TEdge& T_root_node = TEdge()) //{ // func(node, T_root_node); // for(auto& e : node.edges) { // const TEdge T_root_child = T_root_node * e.parent_child; // VisitDepthFirst(e.node, func, T_root_child); // } //} //void Eg() //{ // using RenderNode = TreeNode,OpenGlMatrix>; // RenderNode root; // VisitDepthFirst,OpenGlMatrix>( // root, [](RenderNode& node, const OpenGlMatrix& T_root_node) { // if(node.item) { // node.item->DoRender(); // } // }, IdentityMatrix()); //} }