2012-04-12 9 views
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) 

だから、私は、構造体TKの値をプリントアウトするint型またはcharのいずれかが必要です。変数がオペランドまたはシンボルになるかどうかわからないときに、どのようにしてユニオン内に含まれているものにアクセスできますか?ありがとう。

答えて

5

categoryメンバー(これはユニオンの一部ではありません)を使用して、どのユニオン要素を使用するかを決定する必要があります。次のような何かが(私は明らかに、カテゴリ定義で推測している)に有用であるかもしれない:

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

オペレーターが(の定数参照を使用し、categoryメンバーが現在有効なユニオンの要素を特定しているため、正確に印刷するために必要な情報があります。

4

はそれは「カテゴリ」の数が示すことになっているものはありませんか?これはtagged unionのように見えます。カテゴリーはタグです。トークンがオペランドかシンボルかを示す必要があります。また、トークンを使用して、どのフィールドをユニオンでアクセスするかを決めることができます。

3

int categoryビットは、unionの解釈方法を示します。通常これは列挙型です。

いずれかの方法あなただけswitchステートメントを使用(またはあなたが2つしかcategorysを持っているように、おそらくif then elseは十分であろう。

関連する問題