首页 > 解决方案 > 在 C++20 中迭代结构的成员

问题描述

我记得 C++20 具有迭代结构中成员的功能,我阅读了一篇关于它的博客,其中包含示例代码,但我再也找不到它了。

例如:

struct Foo {
  std::string a;
  std::string b;
  std::string c;
}; 


struct Bar {
  std::string e;
  std::string f;
};

template <typename T>
void PrintMember (T& t) {
  // what to do to iterate members in C++ 20?
}

模板的代码可能看起来不像,因为 C++20 有概念。知道如何编写代码来迭代Foo和中的成员Bar吗?

PS我记得它使用概念来解决问题,但也许我错了或者博客错了(这就是我再也找不到它的原因),回答“不,你不能,即使在 C++ 20”是受欢迎的。

PPS 一件事我没有澄清,我不需要字段名称,但我需要迭代所有字段,包括继承的字段。

标签: c++c++20

解决方案


(在这里我假设您也想获取字段名称)

要在没有技巧的情况下实现这一点(例如附加工具或手动添加元信息),您需要 C++ 反射能力。

尽管它可以作为技术规范使用,但这还不是 C++ 的一部分 C++20 是迄今为止的最新标准)。


推荐阅读