C++如何将结构体成员名作为参数传入函数,实现链表指定字段打印?
实现方案
C++中不需要传字符串形式的变量名,直接用成员指针即可实现需求,这也是最贴合你代码结构的实现方式:
方案1:成员指针实现(推荐)
你的两个成员都是int类型,直接指定成员指针参数类型即可:
// 参数为指向Node类int成员的指针 void print(int Node::* member) { Node *n = _head; // 修正原循环逻辑:原条件会漏掉链表最后一个节点 while (n != nullptr) { // 通过->*运算符访问成员指针对应的成员 std::cout << n->*member << std::endl; n = n->next; } }
调用方法:
// 打印所有节点的data成员 print(&Node::data); // 打印所有节点的index成员 print(&Node::index);
如果后续需要支持Node的不同类型成员打印,可以改成通用模板版本:
template <typename T> void print(T Node::* member) { Node *n = _head; while (n != nullptr) { std::cout << n->*member << std::endl; n = n->next; } }
方案2:枚举+分支实现
如果不想用指针语法,也可以用枚举做选择器实现:
// 定义成员选择枚举 enum NodeMember { DATA, INDEX }; void print(NodeMember selector) { Node *n = _head; while (n != nullptr) { switch(selector) { case DATA: std::cout << n->data << std::endl; break; case INDEX: std::cout << n->index << std::endl; break; } n = n->next; } }
调用方法:
print(DATA); print(INDEX);
内容的提问来源于stack exchange,提问作者axmay
相关产品推荐
相关产品推荐

