C++ 中如何遍历对象的成员?

传入一个对象,可以知道这个对象一共有哪些成员,分别是什么类型吗?
关注者
228
被浏览
62,532

4 个回答

如果有这种需求的,最好的办法是自己实现动态的面向对象接口。使用某种映射来关联名字及其对应含义(对象成员,对象方法等),并且嵌入类型信息。所以,问题回到你究竟想要干什么?

如果是仅仅想要知道标准C++实现里面怎么做,简单的回答是不能。

你想要的可能是类似Java的反射机制。可惜的是,直到最新的C++20版本,反射特性还没有被加入C++标准(本来规划要在C++20中包含的,后来被推迟了)。但好消息是,C++23标准应该就能看到编译期反射特性了。

在现有的标准下,想用反射也不是没有办法,boost库的PFR组件就提供了简单的反射功能:

比如下面的代码,不需要任何宏,只要用PFR的模板功能就可以按序号访问struct的成员。

#include <iostream>
#include <string>
#include "boost/pfr.hpp"
struct some_person {
    std::string name;
    unsigned birth_year;
int main() {
    some_person val{"Edgar Allan Poe", 1809};