2013-10-20 299 views
-1

我正在爲一種編程語言做一個解釋器,並且我正在處理堆棧,但是我一直無法找到一個簡單的動態結構解決方案,它可以包含多種數據類型。我需要能夠存儲多種數據類型的結構,如整型,長整型,字符串等在C++數據結構中存儲多種數據類型

+0

您可能想了解工會。 –

+2

或可能[Boost變體](http://www.boost.org/doc/libs/1_54_0/doc/html/variant.html)。 –

回答

0

您可以使用union:

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

this link看看詳細內容。聯盟通常用於實施口譯和編譯器,例如在yacc(野牛)和lex。順便說一下,你可以查看它們,這些可以簡化多個編譯器的編碼。

+0

我如何做到這一點與多種類型 – Popgalop

+0

簡單,變量'union someUnion someVar;'接受'int','長整型','char *'等 –

1

一種相對容易的方式來構建這樣的數據結構將是使用union,像這樣:

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

這可能不是最經濟的,但是,因爲該結構的大小是相等的最大的數據類型。更好的方法是使用「原始」內存塊來處理堆棧,並將其部分動態分配給堆棧上的元素。但是,您需要注意數據的對齊,以避免將多字節數據放置在偏移量上,導致訪問速度變慢或導致運行時錯誤。