Hana BOOST _Hana_DEFINE_STRUCT不适用于std::unique_ptr

Hana BOOST_HANA_DEFINE_STRUCT does not work with std::unique_ptr

本文关键字:Hana unique std ptr 不适用 BOOST DEFINE STRUCT 适用于      更新时间:2023-10-16

Boost Hana的Boost _Hana_DEFINE_STRUCT似乎无法使用std::unique_ptr作为字段。有什么变通办法吗?

#include <boost/hana.hpp>
#include <memory>
struct Test
{
BOOST_HANA_DEFINE_STRUCT(Test,
(unsigned, field0),
(std::unique_ptr<unsigned>, field1));
};
int main(int argc, char** argv)
{
Test test;
boost::hana::for_each(boost::hana::members(test), [&](auto field)
{
});
return 0;
}

错误:没有用于初始化"tuple::type,typename detail::decay>&>:"的匹配构造函数type>'(又名"元组>>"({return{static_cast(xs(…};}

是的,不幸的是,members生成了一个元组,其中的值在作为左值引用传递时被复制。

您可以使用accessorskeys来获得对每个成员的引用:

#include <boost/hana.hpp>
#include <memory>
struct Test
{
BOOST_HANA_DEFINE_STRUCT(Test,
(unsigned, field0),
(std::unique_ptr<unsigned>, field1));
};
int main(int argc, char** argv)
{
Test test;
boost::hana::for_each(boost::hana::keys(test), [&](auto key)
{
auto& field = boost::hana::at_key(test, key);
});
return 0;
}