作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想遍历一个在其他库中定义的结构,其源不在我的控制之下。因此,任何需要使用自己的宏/适配器定义结构的库,如 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; } );
关于c++ - 有没有办法遍历结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60398990/
我是一名优秀的程序员,十分优秀!