存储数据类型信息

时间:2011-02-08 12:31:03

标签: c++ typeinfo

假设我有一些不同类型的变量。

int MyInteger;
double MyDouble;
char MyChar;

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

void* IntegerPointer = &MyInteger;
void* DoublePointer = &MyDouble;
void* CharPointer = &MyChar;

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

我想将数据类型信息存储在并行数组中。 type_info似乎适合该任务,但不支持分配。所以我不能只做这样的事情:

type_info TypeInfoArray[] = {int, double, char};

是否有其他方法可以存储有关数据类型的信息?

4 个答案:

答案 0 :(得分:5)

我建议你使用变体类型。我不想这么说,但试试boost::variant(或类似的东西)。忘记所有这些并行数组和void指针的东西;单一阵列的变体实现了同样的目标,而且更加优雅。

答案 1 :(得分:2)

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

的数组

答案 2 :(得分:0)

如果您正在寻找容纳不同类型序列的容器,请查看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 * ......唯一的缺点是序列中可以包含的“元素”数量有限(通常是模板参数的数量)由编译器强制执行。)

答案 3 :(得分:0)

元组也可以完成这项任务。

std::tuple<int*,float*> tp (&yourInt, &yourFloat);