C++带有链表的通用容器

发布于 2024-10-30 08:08:57 字数 193 浏览 7 评论 0原文

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

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

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

I want to design a generic container for use with linked lists (for example).
I tried using void* as an element but this fails when I provide the following.

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

If I allocate the member on the heap and pass the address it works, but how can I handle the case of using stack variables in the example above?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

夏了南城 2024-11-06 08:08:57

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

Personally I would use boost::any for this.

遇见了你 2024-11-06 08:08:57

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

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

等等...

... could simply try to overload the insert function...

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

etc....

溺孤伤于心 2024-11-06 08:08:57

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

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);
}

You need to add the size in bytes somehow.

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

etc.

The insert method could then for example look like this:

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

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

  memcpy(node.data, data, size);
}
鲸落 2024-11-06 08:08:57

如果你真的想要一个通用容器,你别无选择,只能创建一个包含标量值的虚拟对象(天哪,为什么我必须考虑 java?)并插入它。您可以添加特殊的 insert_int、insert_char...方法如何自行进行复制。这样,您在处理文字和堆栈变量时就不会遇到任何问题。

If you really want a generic container, you have no choice but to create a dummy object containing the scalar value (OMG-why do I have to think of java?) and insert that. You could add special insert_int, insert_char, ... methods how do the copying on their own. This way you had also no trouble with literals and stack variables.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文