How can I store objects of differing types in a C++ container?(如何在 C++ 容器中存储不同类型的对象?)
问题描述
是否有我可以使用或构建的 C++ 容器,它可以包含例如 int
和 string
和 double
类型?我面临的问题是,每当我尝试使用以下内容填充地图、向量或列表时:
Is there a C++ container that I could use or build that can contain, say, int
and string
and double
types? The problem I'm facing is that whenever I try to populate, say, a map, vector or list with, say, the following:
int x;
string y;
double z;
我受格式限制:
list<int> mycountainer;
vector<string> mycontainer;
强制 mycontainer
只包含一种类型.
which forces mycontainer
to only consist of one type.
在有人建议泛型之前,这也行不通,因为 C++ 附带的标准 vector
和 list
容器已经是通用的 -它们可以是任何类型的容器,但不能包含多种类型.
Before anyone suggest generics, that wouldn't work either since the standard vector
and list
containers that come with C++ are already generic - they can be container for any types but cannot contain multiple types.
如果可能的话,我也想避免使用 Boost - 如果有一种我可以自己编写代码的简单方法,我会更喜欢它.
I would like to avoid using Boost also if at all possible - I'd prefer it if there is a simple way I could code this myself.
推荐答案
您可以使用(或重新实现)boost::any
并存储 boost::any
的实例代码> 在容器中.那将是最安全的,因为 boost::any
可能已经处理了在一般情况下解决此类问题所涉及的许多边缘情况和复杂性.
You could use (or re-implement) boost::any
and store instances of boost::any
in a container. That would be the safest, since boost::any
has probably dealt with much of the edge cases and complexity involved in solving this kind of problem in the general case.
如果您想做一些快速而肮脏的事情,请创建一个结构或一个联合,其中包含所有潜在类型的成员以及对象中哪种类型是活动的"的枚举或其他指示符.使用联合时要特别小心,因为它们有一些有趣的属性(例如,如果您读错了联合成员,则会调用未定义的行为,一次只能活动"一个成员,即最近写入的成员).
If you want to do something quick and dirty, create a structure or perhaps a union containing members of all potential types along with an enumeration or other indicator of which type is 'active' in the object. Be especially careful with unions as they have some interesting properties (such as invoking undefined behavior if you read the wrong union member, only one of the members can be 'active' at a time, the one that was most recently written to).
我很好奇你在做什么,你需要这样一个构造.
I'm curious what you're doing that you need such a construct, though.
这篇关于如何在 C++ 容器中存储不同类型的对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何在 C++ 容器中存储不同类型的对象?
基础教程推荐
- 如何使图像调整大小以在 Qt 中缩放? 2021-01-01
- 如何“在 Finder 中显示"或“在资源管理器中显 2021-01-01
- 使用从字符串中提取的参数调用函数 2022-01-01
- 为什么语句不能出现在命名空间范围内? 2021-01-01
- 在 C++ 中循环遍历所有 Lua 全局变量 2021-01-01
- 如何在不破坏 vtbl 的情况下做相当于 memset(this, ...) 的操作? 2022-01-01
- 为 C/C++ 中的项目的 makefile 生成依赖项 2022-01-01
- 管理共享内存应该分配多少内存?(助推) 2022-12-07
- 从 std::cin 读取密码 2021-01-01
- Windows Media Foundation 录制音频 2021-01-01