工会是否可以保证使用boost :: hana :: Structure?

时间:2018-08-16 11:53:24

标签: c++ c++14 unions boost-hana

假设我有这个

#include "boost/hana.hpp"


union Thing {
    BOOST_HANA_DEFINE_STRUCT(Thing,
        (long, m1),
        (int, m2)
    );
};

目前可以使用,但是是否有什么可以保证它始终可以使用(将来的某些更改不会使它不起作用)?

1 个答案:

答案 0 :(得分:1)

文档声称支持使用宏来定义“用户定义类型” here中的成员,并且自union is technically a type of class起,我可以肯定地说它是支持。

这并不是说它将始终受支持,但是对其进行更改将是一项重大更改,并且可能需要新的主要版本,例如Boost.Hana 2.0。

关于Struct概念的相关接口,还有其他一些问题可以解决,但是我认为这不会影响此用例。

如果您希望得到作者的权威答复,也许Github上的问题将是解决之道。

所有这些都请记住,Struct会优化ComparableFoldable,它们按顺序对成员进行操作,这对于工会成员来说有点奇怪。 >

这是一个很好的主意,我很想知道如何解决这个问题。

我扩展了您的示例:

#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);
}