c++获取结构体成员名称
时间: 2023-12-19 11:05:53 浏览: 36
在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_names() {
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 << endl;
}
}
struct Person {
int age;
string name;
};
int main() {
print_member_names<Person>();
return 0;
}
```
这个示例代码中,我们定义了一个模板类 `member_pointer_type`,用于从结构体成员指针类型中获取成员类型。然后,我们定义了一个模板函数 `get_member_pointer`,用于将结构体成员指针转换为成员指针类型。最后,我们定义了一个模板函数 `print_member_names`,用于打印出结构体的所有成员名称。
在 `main` 函数中,我们将结构体 `Person` 作为模板参数传递给 `print_member_names` 函数,从而输出 `Person` 结构体的所有成员名称。