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

工会保证与boost::hana::Structure一起工作吗?

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

    假设我有这个:

    #include "boost/hana.hpp"
    
    
    union Thing {
        BOOST_HANA_DEFINE_STRUCT(Thing,
            (long, m1),
            (int, m2)
        );
    };
    

    这目前是可行的,但有什么可以保证它始终有效(某些未来的改变不会使它生效,所以这不起作用)?

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

    文档声称支持使用宏在“用户定义类型”中定义成员 here union is technically a type of class

    这并不是说它将一直受到支持,但改变它将是一个突破性的改变,可能需要一个新的主要版本ie Boost.Hana 2.0。

    Struct concept的相关接口可以修复,但我认为这不会影响这个用例。

    如果你想从作者那里得到一个权威的答案,也许Github上的一个问题就是解决之道。

    所有这些都说,记住 结构 改进 Comparable Foldable

    这是个好主意,我很想看看能用它做些什么。

    #define BOOST_HANA_CONFIG_ENABLE_STRING_UDL
    #include "boost/hana.hpp"
    
    namespace hana = boost::hana;
    using namespace boost::hana::literals;
    
    
    union Thing {
        BOOST_HANA_DEFINE_STRUCT(Thing,
            (long, m1),
            (int, m2)
        );
    };
    
    int main()
    {
      Thing thing{};
      hana::at_key(thing, "m2"_s) = 42;
    
      BOOST_HANA_RUNTIME_CHECK(thing.m2 == 42);
    }
    
    推荐文章