2012-04-12 35 views
4

基本上,我有重載< <運營商爲我tokenType結構,它遵循的(不能改變,我必須使用這種方式)使用C++工會,當你想要哪個成員是未知

struct tokenType 
{ 
    int category ; // one of token categories defined above 
    union 
    { 
     int operand ; 
     char symbol ; // '+' , '-' , '*' , '/' , '^' , '=' 
    } ; 
    int precedence() const ; 
} 

我對重載方法頭是:

ostream & operator<< (ostream & os , const tokenType & tk) 

所以,我需要在結構TK打印出來的價值,無論是int或字符。當我不知道變量是操作數還是符號時,如何訪問聯合中包含的內容?謝謝。

回答

5

你需要做的是查看category成員(它不是聯盟的一部分)來決定使用哪個聯合元素。像下面的內容可能是有用的(我猜的類別定義,很明顯):

switch (tk.category) { 
    case catOperand: 
     os << tk.operand; 
     break; 
    case catSymbol: 
     os << tk.symbol; 
     break; 
} 
2

由於您的運營商採用(恆定引用a)tokenType,並且category成員標識該聯合的哪個元素當前有效,因此您需要準確打印它的信息。

4

這不就是在「類別」號應該說明什麼?這看起來像一個tagged union,其中類別是標籤。它應該告訴你令牌是一個操作數還是一個符號,並且可以用它來決定在聯合中訪問哪個字段。

3

int category位告訴你如何解釋union。通常這是一個枚舉類型。

無論哪種方式,你只需要使用一個switch聲明(或者也許你只有兩個的categorys的if then else就足夠了。

相關問題