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;
};
};
本文通过一个C++程序示例展示了如何使用枚举类型定义Token类型,并结合联合来实现不同数据类型的动态存储。此外,还介绍了一个用于构建树形结构的模板结构体,该结构体同样利用了联合来区分叶子节点与分支节点。
322

被折叠的 条评论
为什么被折叠?



