首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >存储数据类型信息

存储数据类型信息
EN

Stack Overflow用户
提问于 2011-02-08 20:31:03
回答 4查看 1.5K关注 0票数 2

假设我有几个不同类型的变量。

代码语言:javascript
运行
复制
int MyInteger;
double MyDouble;
char MyChar;

指向这些变量的指针存储在一个空指针数组中。

代码语言:javascript
运行
复制
void* IntegerPointer = &MyInteger;
void* DoublePointer = &MyDouble;
void* CharPointer = &MyChar;

void* PointerArray[] = {IntegerPointer, DoublePointer, CharPointer};

我想将数据类型信息存储在并行数组中。type_info似乎适合这项任务,但不支持赋值。所以我不能这样做:

代码语言:javascript
运行
复制
type_info TypeInfoArray[] = {int, double, char};

有没有其他方法来存储有关数据类型的信息?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-02-08 20:34:15

我建议您使用变体类型。我不想这么说,但是可以试试boost::variant (或者类似的东西)。忘记所有这些并行数组和空指针的东西;单个变量数组实现了同样的事情,而且更优雅。

票数 5
EN

Stack Overflow用户

发布于 2011-02-08 20:33:22

看看typeinfo吧。然后,您可以将类型信息存储为std::string数组

票数 2
EN

Stack Overflow用户

发布于 2011-02-08 22:55:23

如果您正在寻找一个容器来保存不同类型的序列,只需查看boost::fusion即可。

例如,如果对类型使用融合序列,

代码语言:javascript
运行
复制
fusion::vector<int, double, char> object_array(1, 2.0, 'F');

现在,要获取索引0处的内容,例如

代码语言:javascript
运行
复制
at<0>(object_array); // will provide a reference to the int field

它是完全类型安全的,而且看不到void * ...唯一的缺点是序列中可以包含的“元素”的数量是有限制的(通常是编译器强制执行的模板参数的数量)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4933008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档