在c ++数据结构中存储多种数据类型

时间:2013-10-20 19:40:28

标签: c++ stack

我正在编写一个编程语言的解释器,我正在处理堆栈,但我无法为动态结构找到一个简单的解决方案,它可以包含多种数据类型。我需要能够在结构中存储多个数据类型,例如整数,长整数,字符串等。

2 个答案:

答案 0 :(得分:1)

构建此类数据结构的一种相对简单的方法是使用union,如下所示:

union AnyType {
    int int_val;
    long long long_val;
    float float_val;
    double int_val;
    char char_val;
    char *char_prt;
};

这可能不是最经济的,因为这种结构的大小等于最大数据类型的大小。更好的方法是为堆栈使用“原始”内存块,动态地将其部分分配给堆栈上的元素。但是,您需要注意数据的对齐,以避免将多字节数据放在偏移处,这会使访问速度变慢或导致运行时错误。

答案 1 :(得分:0)

您可以使用union:

union someUnion
{
  int a;
  long int b;
  char *string;
  //...any other needed type 
}

请查看this link了解详情。联盟通常用于实施口译员和编译器,例如在yacc(野牛)和lex。顺便说一句,你可以检查它们,这些可以简化解释器的编码。