相关疑难解决方法(0)

boost pfr 如何获取结构体的字段名称?

在 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)

c++ reflection boost c++20

4
推荐指数
1
解决办法
506
查看次数

在 C++ 中不使用字段名称打印实例化结构的值

我可以做吗?

例如,考虑以下结构:

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++ 字符串。

c++ string struct

2
推荐指数
1
解决办法
1315
查看次数

标签 统计

c++ ×2

boost ×1

c++20 ×1

reflection ×1

string ×1

struct ×1