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