c++如何遍历结构体的所有成员
时间: 2024-03-09 21:44:43 浏览: 453
指针(*p++ , (*p)++, *(p++), *p+2)与结构体遍历
在C++中,遍历结构体的所有成员可以使用反射机制来实现。具体来说,可以使用模板元编程技术来实现这一功能。下面是一个简单的示例代码:
```cpp
#include <iostream>
#include <string>
#include <typeinfo>
using namespace std;
template <typename T, typename U>
struct member_pointer_type {
typedef U T::*type;
};
template <typename T, typename U>
typename member_pointer_type<T, U>::type get_member_pointer(U T::*member) {
return member;
}
template <typename T>
void print_member_values(const T& obj) {
const int num_members = sizeof(T) / sizeof(int);
for (int i = 0; i < num_members; ++i) {
typedef typename member_pointer_type<T, int>::type member_pointer;
member_pointer member_ptr = get_member_pointer(&T::*(obj + i));
const char* member_name = typeid(member_ptr).name();
cout << member_name << ": " << obj.*member_ptr << endl;
}
}
struct Person {
int age;
string name;
};
int main() {
Person p = { 30, "Tom" };
print_member_values(p);
return 0;
}
```
这个示例代码中,我们定义了一个模板类 `member_pointer_type`,用于从结构体成员指针类型中获取成员类型。然后,我们定义了一个模板函数 `get_member_pointer`,用于将结构体成员指针转换为成员指针类型。最后,我们定义了一个模板函数 `print_member_values`,用于打印出结构体的所有成员值。
在 `main` 函数中,我们定义了结构体变量 `p`,并将其传递给 `print_member_values` 函数,从而输出 `Person` 结构体的所有成员值。
阅读全文