假设我有几个不同类型的变量。
int MyInteger;
double MyDouble;
char MyChar;
指向这些变量的指针存储在一个空指针数组中。
void* IntegerPointer = &MyInteger;
void* DoublePointer = &MyDouble;
void* CharPointer = &MyChar;
void* PointerArray[] = {IntegerPointer, DoublePointer, CharPointer};
我想将数据类型信息存储在并行数组中。type_info
似乎适合这项任务,但不支持赋值。所以我不能这样做:
type_info TypeInfoArray[] = {int, double, char};
有没有其他方法来存储有关数据类型的信息?
发布于 2011-02-08 12:34:15
我建议您使用变体类型。我不想这么说,但是可以试试boost::variant (或者类似的东西)。忘记所有这些并行数组和空指针的东西;单个变量数组实现了同样的事情,而且更优雅。
发布于 2011-02-08 12:33:22
看看typeinfo吧。然后,您可以将类型信息存储为std::string数组
发布于 2011-02-08 14:55:23
如果您正在寻找一个容器来保存不同类型的序列,只需查看boost::fusion即可。
例如,如果对类型使用融合序列,
fusion::vector<int, double, char> object_array(1, 2.0, 'F');
现在,要获取索引0处的内容,例如
at<0>(object_array); // will provide a reference to the int field
它是完全类型安全的,而且看不到void *
...唯一的缺点是序列中可以包含的“元素”的数量是有限制的(通常是编译器强制执行的模板参数的数量)。
https://stackoverflow.com/questions/4933008
复制相似问题