假设我有一些不同类型的变量。
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};
是否有其他方法可以存储有关数据类型的信息?
答案 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);