工会是否保证与 boost::hana::Structure 合作?

Are unions guaranteed to work with boost::hana::Structure?

假设我有这个:

#include "boost/hana.hpp"


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

这目前有效,但是否有任何东西可以保证它始终有效(未来的某些更改不会使其无效)?

文档声称支持使用宏来定义 "user-defined type" here, and since a 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);
}