Hana BOOST _Hana_DEFINE_STRUCT不适用于std::unique_ptr
Hana BOOST_HANA_DEFINE_STRUCT does not work with std::unique_ptr
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
生成了一个元组,其中的值在作为左值引用传递时被复制。
您可以使用accessors
或keys
来获得对每个成员的引用:
#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;
}
相关文章:
- 为什么 std::unique 不调用 std::sort?
- 如何包装(撰写)增强 hana 地图并访问括号运算符(运算符 [])?
- 生成提升::hana::set 的常量表达式问题
- 生成"unique"矩阵
- boost::hana:为什么我无法过滤集?
- 增强 Hana index_if和类型
- 如何修改增强 hana 结构的成员
- 我对 std::unique(算法)C++有问题
- 为什么我在循环提升时得到意外的索引::hana::元组
- 如何将 boost::hana::map 转换为 lambda
- 使用 Boost::Hana 中的 BOOST_HANA_DEFINE_STRUCT 定义具有 40 个以上字段的结构
- 如何将 boost::hana::tuple 转换为 std::变体
- Boost.Hana:在 constexpr 上下文中将值元组转换为相应类型的元组
- 如何实现 Boost.Hana 结构的相等比较运算符?
- 如何使用 Boost.Hana 声明成员变量
- 使用"hana::is_valid"在常量引用时失败
- 取 boost::hana::p artial::operator() 的地址
- std::shared_ptr::unique(),复制和线程安全
- 从具有部分专用化的boost:hana::set中提取类型失败
- 如何在C++03中用自定义谓词调用std::unique