class Token {
public:
enum TokenType {CHAR, INT, DOUBLE};
TokenType tok;
union { // 匿名联合
char _char;
int _int;
double _double;
};
};
void print(Token token);
int main() {
Token token;
token.tok = Token::CHAR; // 等价于Token::TokenType::CHAR
token._char = 'C';
print(token);
return 0;
}
void print(Token token) {
switch (token.tok) {
case Token::CHAR:
std::cout << token._char << std::endl;
break;
case Token::INT:
std::cout << token._int << std::endl;
break;
case Token::DOUBLE:
std::cout << token._double << std::endl;
break;
default:
assert(0);
}
}
template<typename T>
struct TreeNode {// 叶子节点只有数据,没有指针;分支结点只有指针,没有数据
enum TreeNodeType { TREE_LEAF, TREE_INTERNAL } ;
TreeNodeType type;
// 这种匿名方式十分方便
union {// 匿名联合
struct{// 匿名结构体
struct TreeNode *left;
struct TreeNode *right;
};
T val;
};
};