我想设计一个与链表一起使用的通用容器(例如)。
我尝试使用void*
作为元素,但是当我提供以下内容时,这会失败。
list.insert(5);
list.insert("Hello");
如果我在堆上分配成员并传递它的工作地址,但是如何处理上面示例中使用堆栈变量的情况?
答案 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);
}