代码之家  ›  专栏  ›  技术社区  ›  chila

HANA BooStHANAYDEXEJEXSTRT不与STD::UnQuyJIPTR

  •  1
  • chila  · 技术社区  · 8 年前

    哈娜的BooStHhanaUnjeRexStRew似乎与STD::UnQuyJPTR作为字段不起作用。有什么解决办法吗?

    #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>”(也称为“tuple>>”)的匹配构造函数 返回静态投射(xs)…

    1 回复  |  直到 8 年前
        1
  •  2
  •   Jason Rice    8 年前

    是的,不幸的是, 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;
    }