【问题标题】:Hana BOOST_HANA_DEFINE_STRUCT does not work with std::unique_ptrHana BOOST_HANA_DEFINE_STRUCT 不适用于 std::unique_ptr
【发布时间】:2018-07-20 18:04:04
【问题描述】:

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>'(又名 'tuple >>') { 返回 {static_cast(xs)...}; }

【问题讨论】:

    标签: c++ boost boost-hana


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-14
      • 1970-01-01
      • 1970-01-01
      • 2018-11-30
      • 1970-01-01
      • 2014-05-12
      • 1970-01-01
      相关资源
      最近更新 更多