4

基本上,我必须为我的 tokenType 结构重载 << 运算符,如下所示(无法更改,我必须以这种方式使用它)

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)

所以,我需要打印出 struct tk 中的值,无论是 int 还是 char。当我不知道变量是操作数还是符号时,如何访问联合中包含的内容?谢谢。

4

4 回答 4

5

您需要做的是查看category成员(不是联合的一部分)来决定使用哪个联合元素。像下面这样的东西可能有用(我猜是类别定义,很明显):

switch (tk.category) {
    case catOperand:
        os << tk.operand;
        break;
    case catSymbol:
        os << tk.symbol;
        break;
}
于 2012-04-12T04:57:31.303 回答
4

这不是“类别”数字应该表示的吗?这看起来像一个带标签的 union,其中类别是标签。它应该告诉您令牌是操作数还是符号,您可以使用它来决定要访问联合中的哪个字段。

于 2012-04-12T04:57:50.560 回答
3

int category位告诉您如何解释union. 通常这是一个枚举类型。

无论哪种方式,您都只需使用一个switch语句(或者也许您只有两个类别if then else就足够了。

于 2012-04-12T04:59:09.040 回答
2

由于您的操作员采用 (constant reference to a) tokenType,并且该category成员确定联合的哪个元素当前有效,因此您拥有准确打印它所需的信息。

于 2012-04-12T04:57:22.777 回答