C++带有链表的通用容器
我想设计一个与链接列表一起使用的通用容器(例如)。 我尝试使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
就我个人而言,我会使用
boost::any
为此。
Personally I would use
boost::any
for this....可以简单地尝试重载插入函数...
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....
您需要以某种方式添加字节大小。
等等。
插入方法可以如下所示:
You need to add the size in bytes somehow.
etc.
The insert method could then for example look like this:
如果你真的想要一个通用容器,你别无选择,只能创建一个包含标量值的虚拟对象(天哪,为什么我必须考虑 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.