c++模板编程-异质链表

概念:

   像一个普通的链表结点中,其中成员next通常是指向同类型结点的指针.这就约束了链表中结点必须是同一类型,从而整个链表都只能保存同一类型的数据。而异质链表则是让next指向任何一种类型,也包括存有其他类型值得结点。这里就采用模板的方式.

数据结构:

 

template<typename T,typename N>
struct hetero_node{
     T value;
     N* next;
     hetero_node(T const& v,N* n):value(v),next(n){}
};
//hetero_node有两个模板参数,T定义结点所保存的数据类型,而N则定义链表中下一个结点的类型.

 

假设我们现在要一个数据结构保存三个数据分别为int,char及std::string类型,则用hetero_node类模板可以构造出一个拥有三个结点分别保存三个数据的异质链表.具体代码:

typedef hetero_node<char,void> node_0;
node_0 *p0;
typedef hetero_node<int,node_0> node_1;
node_1 *p1;
typedef hetero_node<std::string,node_1> node_2;
node_2 *p2;

p1->next=p0;
p2->next=p1;

 

posted @ 2014-09-24 21:52  晓风_7  阅读(725)  评论(0编辑  收藏  举报