带链表的C ++通用容器

时间:2011-04-05 14:06:11

标签: c++ algorithm generics data-structures containers

我想设计一个与链表一起使用的通用容器(例如)。 我尝试使用void*作为元素,但是当我提供以下内容时,这会失败。

list.insert(5);
list.insert("Hello");

如果我在堆上分配成员并传递它的工作地址,但是如何处理上面示例中使用堆栈变量的情况?

4 个答案:

答案 0 :(得分:4)

就我个人而言,我会使用boost::any

答案 1 :(得分:1)

...可以简单地尝试重载插入函数...

List::insert( int i ){}
List::insert( char* i ){}

等...

答案 2 :(得分:0)

如果你真的想要一个通用容器,你别无选择,只能创建一个包含标量值的虚拟对象(OMG-为什么我要考虑java?)并插入它。您可以添加特殊的insert_int,insert_char,...方法如何自行复制。通过这种方式,您也可以轻松使用文字和堆栈变量。

答案 3 :(得分:0)

您需要以某种方式添加字节大小。

int x = 5;
insert (&x, sizeof(int));
insert ("Hello", 6);

然后插入方法可以如下所示:

void insert (void* data, size_t size)
{
  node_t node = malloc ...

  node.data = malloc ...
  node.size = size;

  memcpy(node.data, data, size);
}