c++获取结构体成员名称
时间: 2023-12-19 11:05:54 浏览: 470
在 C++ 中,可以使用反射机制来获取结构体成员名称。具体来说,可以使用模板元编程和宏定义来实现。以下是一个示例代码:
```c++
#include <iostream>
#include <string>
#include <typeinfo>
#define FIELD_NAME(field) #field
template <typename T>
void print_field_names() {
std::cout << "Field names of " << typeid(T).name() << ":" << std::endl;
T t;
(void)t; // suppress unused variable warning
#define FIELD_DEF(field) std::cout << FIELD_NAME(field) << std::endl;
T::fields(FIELD_DEF)
#undef FIELD_DEF
}
struct Person {
std::string name;
int age;
std::string address;
static void fields(void (*f)(const char *)) {
f("name");
f("age");
f("address");
}
};
int main() {
print_field_names<Person>();
return 0;
}
```
在上面的示例代码中,我们定义了一个 `print_field_names` 函数,它使用模板元编程和宏定义来获取结构体成员名称。具体来说,我们定义了一个 `FIELD_NAME` 宏,它将结构体成员名称转换为字符串。然后,我们定义了一个 `fields` 静态函数,它接受一个函数指针作为参数,将结构体成员名称作为字符串传递给该函数。最后,我们在 `print_field_names` 函数中调用 `fields` 函数,并将一个 lambda 表达式作为参数,该 lambda 表达式将接收到的字符串输出到控制台。
当我们在 `main` 函数中调用 `print_field_names<Person>()` 时,它将输出以下内容:
```
Field names of 6Person:
name
age
address
```
这里,我们定义了一个 `Person` 结构体,并在其中定义了三个成员变量。然后,我们通过调用 `print_field_names<Person>()` 函数来获取它们的名称。
阅读全文