在 Boost 1.84 中(目前正在进行中):
大新功能:字段名称反射。添加了新的 constexpr boost::pfr::get_name<N, T>() 函数,该函数返回 std::string_view,其字段名称位于聚合 T 的索引 N 处。需要 C++20。
使用github 上最新版本的 pfr,您可以编写如下代码
#include <boost/pfr/core.hpp>
#include <boost/pfr/core_name.hpp>
struct S
{
int i = 1;
double d = 2;
std::string s = "three";
};
const S s;
constexpr auto names = boost::pfr::names_as_array<S>();
boost::pfr::for_each_field(
s,
[&names](const auto& field, std::size_t idx)
{ std::cout << idx << ": " << names[idx] << " = " << field << '\n'; });
Run Code Online (Sandbox Code Playgroud)
输出:
0: i = 1 …Run Code Online (Sandbox Code Playgroud) 我可以做吗?
例如,考虑以下结构:
struct bag {
string fruit;
string book;
string money;
};
Run Code Online (Sandbox Code Playgroud)
我想以顺序形式打印结构包实例的字段值并获得如下输出:
apple
Computer Networking, A top-down Approach
100
Run Code Online (Sandbox Code Playgroud)
但不使用领域的名称(水果、书籍和金钱)。任何帮助,将不胜感激。我知道的唯一信息是所有字段都是 C++ 字符串。