, java- Tree<void*>. , :
class TreeBase { };
class TreeInt : public TreeBase { int i; };
Tree<TreeBase*>. , . Java.
Tree<Node> n; struct Node { TreeBase *b; };
, ++ , ++:
class TreeNode { virtual ~TreeNode() { } };
class MyIntTreeNode : public TreeNode {
public:
MyTreeNode(int i) : i(i) { }
int i;
};
class MyStringTreeNode : public TreeNode {
public:
MyStringTreeNode(string s) : s(s) { }
string s;
};
class MyArrayTreeNode : public TreeNode {
public:
MyArrayTreeNode(std::vector<TreeNode*> v) : v(v) { }
std::vector<TreeNode*> v;
};
, :
int main() {
MyIntTreeNode n1(10);
MyStringTreeNode n2("abc");
std::vector<TreeNode*> v;
v.push_back(&n1);
v.push_back(&n2);
MyArrayTreeNode n3(v);
algo(n3);
}
This approach has the advantage that each treenode can have a different behavior. The disadvantage is that it is a bit detailed.
source
share