Re: nest templates class problem
Eddy Xu <eddyxu@gmail.com> wrote:
Now I have two template classes:
template<
typename Key,
typename Value
typename Op
>
class Node{
....
public:
int append(Node *node) { return op_.append(node));
....
private:
Op op_;
}
And I wish to define a Node_XXX_Children to separate the operations
on node children, so that
I can use Node<Key, Value, Node_Map_Childrend>, and etc, to provide
different strategy to deal with child node.
template<
typename Key,
>
Node_Map_Children{
public:
int append(Node *node) { ctn_[node->key] = node; return 0;}
private:
std::map<Key, Node*> ctn_;
};
But it's nested template define. How can I resolve it?
Thanks for advices.
Why not mix classic OOP and templates derived from a base class.
then the 'tree' can contain Children containing nodes of Children
constaining nodes or a mixture of Op nodes and Children containing
nodes.
Not tested but something like this.
template <class Key>
struct node_base
{
Key key;
virtual ~node_base(){}
virtual int append(node_base *)=0;
};
template <class Key,class Op>
class op_node:public node_base<Key>
{
Op op;
public:
explicit op_node(const Op &a):op(a)
int append(node_base * p)
{
return op(o);
}
};
template <class Key>
class parent_node:public node_base<Key>
{
std::map<Key,node_base *> children;
public:
int append (node_base * p)
{
children[p->key] - p;
return 0;
}
};
etc.
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]