gpt4 book ai didi

c++ - 有没有办法遍历结构?

转载 作者:行者123 更新时间:2023-12-01 14:43:19 24 4
gpt4 key购买 nike

我想遍历一个在其他库中定义的结构,其源不在我的控制之下。因此,任何需要使用自己的宏/适配器定义结构的库,如 previous questions不能在这里使用。我发现最接近的方法是使用 boost::hana .但是,它仍然需要填充一个适配器,然后我才能对其进行迭代。我附上了一个 example here.我想知道有什么方法可以自动化 BOOST_HANA_ADAPT_STRUCT那么我不需要在那里填写所有结构成员名称(这些结构总共有一百多个成员)。

#include <iostream>
#include <boost/hana.hpp>
#include <typeinfo>
namespace hana=boost::hana;
struct adapt_test
{
std::string name;
int data;
};
BOOST_HANA_ADAPT_STRUCT(
adapt_test
, name
, data
);
auto names = hana::transform(hana::accessors<adapt_test>(), hana::first);
int main() {
hana::for_each(
names,
[] (auto item)
{
std::cout << hana::to<char const *>(item) << std::endl;
}
);
adapt_test s1{"a", 2};
hana::for_each(
s1,
[] (auto pair)
{
std::cout << hana::to<char const *>(hana::first(pair)) << "=" << hana::second(pair) << std::endl;
}
);
return 0;
}

最佳答案

您可以使用 Boost Flat Reflection喜欢:

struct adapt_test
{
std::string name;
int data;
};
adapt_test s1{"a", 2};

std::cout << boost::pfr::get<0>(s1) << std::endl;
std::cout << boost::pfr::get<1>(s1) << std::endl;

boost::pfr::flat_for_each_field(s1, [] (const auto& field) { std::cout << field << std::endl; } );

附言尊重 @apolukhin对于这个图书馆。

关于c++ - 有没有办法遍历结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60398990/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com